[PATCH] D54742: [CodeMetrics] Don't let extends of i1 be free.
Jonas Paulsson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 7 05:46:58 PST 2019
jonpa updated this revision to Diff 180470.
jonpa added a comment.
Test updated per review so that the costs of extensions of i1 are tested directly.
> Sure it does. Run the -cost-model analysis with -cost-kind=code-size and it will call getUserCost().
Ah, thanks and apologies- I was not aware of the -cost-kind=code-size flag.
> I also gave an example that does this in my suggestion.
Yes, indeed, sorry.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54742/new/
https://reviews.llvm.org/D54742
Files:
include/llvm/Analysis/TargetTransformInfoImpl.h
test/Analysis/CostModel/SystemZ/ext-i1-cost.ll
Index: test/Analysis/CostModel/SystemZ/ext-i1-cost.ll
===================================================================
--- /dev/null
+++ test/Analysis/CostModel/SystemZ/ext-i1-cost.ll
@@ -0,0 +1,45 @@
+; RUN: opt < %s -cost-model -cost-kind=code-size -analyze \
+; RUN: -mtriple=s390x-unknown-linux -mcpu=z13 | FileCheck %s
+;
+; Check that getUserCost() does not return TCC_Free for extensions of
+; i1.
+
+define i64 @fun1(i64 %v) {
+; CHECK-LABEL: 'fun1'
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i64 %v, 0
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %z = zext i1 %cmp to i64
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %z
+ %cmp = icmp eq i64 %v, 0
+ %z = zext i1 %cmp to i64
+ ret i64 %z
+}
+
+define i64 @fun2(i64 %v) {
+; CHECK-LABEL: 'fun2'
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i64 %v, 0
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %z = sext i1 %cmp to i64
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %z
+ %cmp = icmp eq i64 %v, 0
+ %z = sext i1 %cmp to i64
+ ret i64 %z
+}
+
+define double @fun3(i64 %v) {
+; CHECK-LABEL: 'fun3'
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i64 %v, 0
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %z = uitofp i1 %cmp to double
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: ret double %z
+ %cmp = icmp eq i64 %v, 0
+ %z = uitofp i1 %cmp to double
+ ret double %z
+}
+
+define double @fun4(i64 %v) {
+; CHECK-LABEL: 'fun4'
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i64 %v, 0
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %z = sitofp i1 %cmp to double
+; CHECK: Cost Model: Found an estimated cost of 1 for instruction: ret double %z
+ %cmp = icmp eq i64 %v, 0
+ %z = sitofp i1 %cmp to double
+ ret double %z
+}
Index: include/llvm/Analysis/TargetTransformInfoImpl.h
===================================================================
--- include/llvm/Analysis/TargetTransformInfoImpl.h
+++ include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -807,15 +807,12 @@
return static_cast<T *>(this)->getCallCost(F, Arguments);
}
- if (const CastInst *CI = dyn_cast<CastInst>(U)) {
- // Result of a cmp instruction is often extended (to be used by other
- // cmp instructions, logical or return instructions). These are usually
- // nop on most sane targets.
- if (isa<CmpInst>(CI->getOperand(0)))
- return TTI::TCC_Free;
- if (isa<SExtInst>(CI) || isa<ZExtInst>(CI) || isa<FPExtInst>(CI))
- return static_cast<T *>(this)->getExtCost(CI, Operands.back());
- }
+ if (isa<SExtInst>(U) || isa<ZExtInst>(U) || isa<FPExtInst>(U))
+ // The old behaviour of generally treating extensions of i1 to be free
+ // has been removed. A target that needs it should override this
+ // method.
+ return static_cast<T *>(this)->getExtCost(cast<Instruction>(U),
+ Operands.back());
return static_cast<T *>(this)->getOperationCost(
Operator::getOpcode(U), U->getType(),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54742.180470.patch
Type: text/x-patch
Size: 3312 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190107/7235d11f/attachment.bin>
More information about the llvm-commits
mailing list