1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
llvm-mirror/test/Analysis/CostModel/SystemZ/ext-of-icmp-cost.ll
Jonas Paulsson c59c742c81 [CodeMetrics] Don't let extends of i1 be free.
getUserCost() currently returns TCC_Free for any extend of a compare (i1)
result. It seems this is only true in a limited number of cases where for
example two compares are chained. Even in those types of cases it seems
unlikely that they are generally free, while they may be in some cases.

This patch therefore removes this special handling of cast of i1. No tests
are failing because of this.

If some target want the old behavior, it could override getUserCost().

Review: Hal Finkel, Chandler Carruth, Evgeny Astigeevich, Simon Pilgrim,
        Ulrich Weigand
https://reviews.llvm.org/D54742/new/

llvm-svn: 360970
2019-05-17 01:26:35 +00:00

54 lines
2.0 KiB
LLVM

; 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 returned from icmp.
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
}
define i64 @fun5(i1 %v) {
; CHECK-LABEL: 'fun5'
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %z = zext i1 %v to i64
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: ret i64 %z
%z = zext i1 %v to i64
ret i64 %z
}