mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[ARM][CostModel] CodeSize costs for i1 arith ops
When optimising for size, make the cost of i1 logical operations relatively expensive so that optimisations don't try to combine predicates. Differential Revision: https://reviews.llvm.org/D86525
This commit is contained in:
parent
5f500e98a4
commit
c37b434c46
@ -1039,13 +1039,28 @@ int ARMTTIImpl::getArithmeticInstrCost(unsigned Opcode, Type *Ty,
|
||||
TTI::OperandValueProperties Opd2PropInfo,
|
||||
ArrayRef<const Value *> Args,
|
||||
const Instruction *CxtI) {
|
||||
int ISDOpcode = TLI->InstructionOpcodeToISD(Opcode);
|
||||
if (ST->isThumb() && CostKind == TTI::TCK_CodeSize && Ty->isIntegerTy(1)) {
|
||||
// Make operations on i1 relatively expensive as this often involves
|
||||
// combining predicates. AND and XOR should be easier to handle with IT
|
||||
// blocks.
|
||||
switch (ISDOpcode) {
|
||||
default:
|
||||
break;
|
||||
case ISD::AND:
|
||||
case ISD::XOR:
|
||||
return 2;
|
||||
case ISD::OR:
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Handle more cost kinds.
|
||||
if (CostKind != TTI::TCK_RecipThroughput)
|
||||
return BaseT::getArithmeticInstrCost(Opcode, Ty, CostKind, Op1Info,
|
||||
Op2Info, Opd1PropInfo,
|
||||
Opd2PropInfo, Args, CxtI);
|
||||
|
||||
int ISDOpcode = TLI->InstructionOpcodeToISD(Opcode);
|
||||
std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, Ty);
|
||||
|
||||
if (ST->hasNEON()) {
|
||||
|
@ -63,9 +63,9 @@ define void @i1() {
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %f = ashr i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %g = lshr i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %h = shl i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i = and i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %j = or i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %k = xor i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %i = and i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %j = or i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %k = xor i1 undef, undef
|
||||
; CHECK-MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void
|
||||
;
|
||||
%c = add i1 undef, undef
|
||||
|
Loading…
x
Reference in New Issue
Block a user