mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
c59c742c81
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
54 lines
2.0 KiB
LLVM
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
|
|
}
|