| ; RUN: opt < %s -cost-model -analyze -mtriple=systemz-unknown -mcpu=zEC12 | FileCheck %s |
| ; |
| ; Check the cost values for older subtargets that use an IPM sequence for |
| ; extension of a compare result. |
| |
| define i8 @fun0(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun0 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun1(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun1 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun2(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun2 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun3(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun3 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun4(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun4 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun5(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun5 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun6(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun6 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun7(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun7 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun8(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun8 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun9(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun9 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun10(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun10 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun11(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun11 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun12(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun12 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun13(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun13 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun14(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun14 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun15(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun15 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun16(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun16 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun17(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun17 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun18(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun18 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun19(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun19 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 5 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun20(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = sext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun20 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i8 |
| } |
| |
| define i16 @fun21(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = sext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun21 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i16 |
| } |
| |
| define i32 @fun22(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = sext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun22 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i32 |
| } |
| |
| define i64 @fun23(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = sext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun23 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 5 for instruction: %v = sext i1 %cmp to i64 |
| } |
| |
| define i8 @fun120(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun120 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun121(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun121 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun122(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun122 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun123(i8 %val1, i8 %val2) { |
| %cmp = icmp eq i8 %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun123 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 |
| } |
| |
| define i8 @fun124(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun124 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun125(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun125 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun126(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun126 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun127(i16 %val1, i16 %val2) { |
| %cmp = icmp eq i16 %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun127 |
| ; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 |
| } |
| |
| define i8 @fun128(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun128 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun129(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun129 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun130(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun130 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun131(i32 %val1, i32 %val2) { |
| %cmp = icmp eq i32 %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun131 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 |
| } |
| |
| define i8 @fun132(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun132 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun133(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun133 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun134(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun134 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun135(i64 %val1, i64 %val2) { |
| %cmp = icmp eq i64 %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun135 |
| ; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 |
| ; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 |
| } |
| |
| define i8 @fun136(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun136 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun137(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun137 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun138(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun138 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun139(float %val1, float %val2) { |
| %cmp = fcmp ogt float %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun139 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i64 |
| } |
| |
| define i8 @fun140(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = zext i1 %cmp to i8 |
| ret i8 %v |
| |
| ; CHECK: fun140 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i8 |
| } |
| |
| define i16 @fun141(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = zext i1 %cmp to i16 |
| ret i16 %v |
| |
| ; CHECK: fun141 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i16 |
| } |
| |
| define i32 @fun142(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = zext i1 %cmp to i32 |
| ret i32 %v |
| |
| ; CHECK: fun142 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i32 |
| } |
| |
| define i64 @fun143(double %val1, double %val2) { |
| %cmp = fcmp ogt double %val1, %val2 |
| %v = zext i1 %cmp to i64 |
| ret i64 %v |
| |
| ; CHECK: fun143 |
| ; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 |
| ; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i64 |
| } |