if (Opcode == Instruction::Or)
return 1;
- if (Opcode == Instruction::Xor && ScalarBits == 1)
- // 2 * ipm sequences ; xor ; shift ; compare
- return 7;
+ if (Opcode == Instruction::Xor && ScalarBits == 1) {
+ if (ST->hasLoadStoreOnCond2())
+ return 5; // 2 * (li 0; loc 1); xor
+ return 7; // 2 * ipm sequences ; xor ; shift ; compare
+ }
if (UDivPow2)
return 1;
if ((Opcode == Instruction::ZExt || Opcode == Instruction::SExt) &&
Src->isIntegerTy(1)) {
+ if (ST->hasLoadStoreOnCond2())
+ return 2; // li 0; loc 1
+
// This should be extension of a compare i1 result, which is done with
// ipm and a varying sequence of instructions.
unsigned Cost = 0;
if (CmpOpTy != nullptr && CmpOpTy->isFloatingPointTy())
// If operands of an fp-type was compared, this costs +1.
Cost++;
-
return Cost;
}
}
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun1(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun2(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun3(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define i8 @fun4(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun5(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun6(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun7(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define i8 @fun8(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun9(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun10(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun11(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define i8 @fun12(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun13(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun14(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun15(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define i8 @fun16(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun17(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun18(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun19(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define i8 @fun20(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i8
}
define i16 @fun21(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i16
}
define i32 @fun22(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i32
}
define i64 @fun23(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = sext i1 %cmp to i64
}
define <2 x i8> @fun24(<2 x i8> %val1, <2 x i8> %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun121(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun122(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun123(i8 %val1, i8 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define i8 @fun124(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun125(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun126(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun127(i16 %val1, i16 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define i8 @fun128(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun129(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun130(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun131(i32 %val1, i32 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define i8 @fun132(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun133(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun134(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun135(i64 %val1, i64 %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define i8 @fun136(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun137(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun138(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun139(float %val1, float %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define i8 @fun140(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i8
}
define i16 @fun141(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i16
}
define i32 @fun142(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i32
}
define i64 @fun143(double %val1, double %val2) {
; 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
+; CHECK: cost of 2 for instruction: %v = zext i1 %cmp to i64
}
define <2 x i8> @fun144(<2 x i8> %val1, <2 x i8> %val2) {
--- /dev/null
+; 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
+}
; RUN: opt < %s -cost-model -analyze -mtriple=systemz-unknown -mcpu=z13 | FileCheck %s
+; RUN: opt < %s -cost-model -analyze -mtriple=systemz-unknown -mcpu=zEC12 \
+; RUN: | FileCheck %s --check-prefix=IPMSQ
;
; TODO: add more tests for differing operand types of the two compares.
; CHECK: fun72
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun73
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun74
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun75
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun76
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun77
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i8 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i8 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}
; CHECK: fun78
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun79
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun80
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun81
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun82
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun83
; CHECK: cost of 3 for instruction: %cmp0 = icmp eq i16 %val1, %val2
; CHECK: cost of 3 for instruction: %cmp1 = icmp eq i16 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}
; CHECK: fun84
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun85
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun86
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun87
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun88
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun89
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i32 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i32 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}
; CHECK: fun90
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun91
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun92
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun93
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun94
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun95
; CHECK: cost of 1 for instruction: %cmp0 = icmp eq i64 %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = icmp eq i64 %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}
; CHECK: fun96
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun97
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun98
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun99
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun100
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun101
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt float %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt float %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}
; CHECK: fun102
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i8 %val5, i8 %val6
}
; CHECK: fun103
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i16 %val5, i16 %val6
}
; CHECK: fun104
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i32 %val5, i32 %val6
}
; CHECK: fun105
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 1 for instruction: %sel = select i1 %and, i64 %val5, i64 %val6
}
; CHECK: fun106
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, float %val5, float %val6
}
; CHECK: fun107
; CHECK: cost of 1 for instruction: %cmp0 = fcmp ogt double %val1, %val2
; CHECK: cost of 1 for instruction: %cmp1 = fcmp ogt double %val3, %val4
-; CHECK: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
+; CHECK: cost of 5 for instruction: %and = xor i1 %cmp0, %cmp1
+; IPMSQ: cost of 7 for instruction: %and = xor i1 %cmp0, %cmp1
; CHECK: cost of 4 for instruction: %sel = select i1 %and, double %val5, double %val6
}