summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Analysis')
-rw-r--r--llvm/test/Analysis/CostModel/SystemZ/cmp-ext-01.ll (renamed from llvm/test/Analysis/CostModel/SystemZ/cmp-ext.ll)96
-rw-r--r--llvm/test/Analysis/CostModel/SystemZ/cmp-ext-02.ll484
-rw-r--r--llvm/test/Analysis/CostModel/SystemZ/scalar-cmp-cmp-log-sel.ll110
3 files changed, 606 insertions, 84 deletions
diff --git a/llvm/test/Analysis/CostModel/SystemZ/cmp-ext.ll b/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-01.ll
index e33587876aa..ba60f08f5f4 100644
--- a/llvm/test/Analysis/CostModel/SystemZ/cmp-ext.ll
+++ b/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-01.ll
@@ -8,7 +8,7 @@ define i8 @fun0(i8 %val1, i8 %val2) {
; 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) {
@@ -18,7 +18,7 @@ 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) {
@@ -28,7 +28,7 @@ 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) {
@@ -38,7 +38,7 @@ 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) {
@@ -48,7 +48,7 @@ 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) {
@@ -58,7 +58,7 @@ 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) {
@@ -68,7 +68,7 @@ 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) {
@@ -78,7 +78,7 @@ 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) {
@@ -88,7 +88,7 @@ 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) {
@@ -98,7 +98,7 @@ 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) {
@@ -108,7 +108,7 @@ 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) {
@@ -118,7 +118,7 @@ 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) {
@@ -128,7 +128,7 @@ 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) {
@@ -138,7 +138,7 @@ 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) {
@@ -148,7 +148,7 @@ 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) {
@@ -158,7 +158,7 @@ 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) {
@@ -168,7 +168,7 @@ 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) {
@@ -178,7 +178,7 @@ 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) {
@@ -188,7 +188,7 @@ 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) {
@@ -198,7 +198,7 @@ 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) {
@@ -208,7 +208,7 @@ 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) {
@@ -218,7 +218,7 @@ 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) {
@@ -228,7 +228,7 @@ 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) {
@@ -238,7 +238,7 @@ 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) {
@@ -1208,7 +1208,7 @@ define i8 @fun120(i8 %val1, 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) {
@@ -1218,7 +1218,7 @@ 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) {
@@ -1228,7 +1228,7 @@ 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) {
@@ -1238,7 +1238,7 @@ 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) {
@@ -1248,7 +1248,7 @@ 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) {
@@ -1258,7 +1258,7 @@ 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) {
@@ -1268,7 +1268,7 @@ 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) {
@@ -1278,7 +1278,7 @@ 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) {
@@ -1288,7 +1288,7 @@ 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) {
@@ -1298,7 +1298,7 @@ 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) {
@@ -1308,7 +1308,7 @@ 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) {
@@ -1318,7 +1318,7 @@ 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) {
@@ -1328,7 +1328,7 @@ 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) {
@@ -1338,7 +1338,7 @@ 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) {
@@ -1348,7 +1348,7 @@ 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) {
@@ -1358,7 +1358,7 @@ 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) {
@@ -1368,7 +1368,7 @@ 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) {
@@ -1378,7 +1378,7 @@ 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) {
@@ -1388,7 +1388,7 @@ 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) {
@@ -1398,7 +1398,7 @@ 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) {
@@ -1408,7 +1408,7 @@ 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) {
@@ -1418,7 +1418,7 @@ 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) {
@@ -1428,7 +1428,7 @@ 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) {
@@ -1438,7 +1438,7 @@ 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) {
diff --git a/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-02.ll b/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-02.ll
new file mode 100644
index 00000000000..d2c201d5d36
--- /dev/null
+++ b/llvm/test/Analysis/CostModel/SystemZ/cmp-ext-02.ll
@@ -0,0 +1,484 @@
+; 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
+}
diff --git a/llvm/test/Analysis/CostModel/SystemZ/scalar-cmp-cmp-log-sel.ll b/llvm/test/Analysis/CostModel/SystemZ/scalar-cmp-cmp-log-sel.ll
index 9ba980780de..8271352ba1d 100644
--- a/llvm/test/Analysis/CostModel/SystemZ/scalar-cmp-cmp-log-sel.ll
+++ b/llvm/test/Analysis/CostModel/SystemZ/scalar-cmp-cmp-log-sel.ll
@@ -1,4 +1,6 @@
; 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.
@@ -1093,7 +1095,8 @@ define i8 @fun72(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1108,7 +1111,8 @@ define i16 @fun73(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1123,7 +1127,8 @@ define i32 @fun74(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1138,7 +1143,8 @@ define i64 @fun75(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1153,7 +1159,8 @@ define float @fun76(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1168,7 +1175,8 @@ define double @fun77(i8 %val1, i8 %val2, i8 %val3, i8 %val4,
; 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
}
@@ -1183,7 +1191,8 @@ define i8 @fun78(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1198,7 +1207,8 @@ define i16 @fun79(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1213,7 +1223,8 @@ define i32 @fun80(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1228,7 +1239,8 @@ define i64 @fun81(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1243,7 +1255,8 @@ define float @fun82(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1258,7 +1271,8 @@ define double @fun83(i16 %val1, i16 %val2, i16 %val3, i16 %val4,
; 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
}
@@ -1273,7 +1287,8 @@ define i8 @fun84(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1288,7 +1303,8 @@ define i16 @fun85(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1303,7 +1319,8 @@ define i32 @fun86(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1318,7 +1335,8 @@ define i64 @fun87(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1333,7 +1351,8 @@ define float @fun88(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1348,7 +1367,8 @@ define double @fun89(i32 %val1, i32 %val2, i32 %val3, i32 %val4,
; 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
}
@@ -1363,7 +1383,8 @@ define i8 @fun90(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1378,7 +1399,8 @@ define i16 @fun91(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1393,7 +1415,8 @@ define i32 @fun92(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1408,7 +1431,8 @@ define i64 @fun93(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1423,7 +1447,8 @@ define float @fun94(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1438,7 +1463,8 @@ define double @fun95(i64 %val1, i64 %val2, i64 %val3, i64 %val4,
; 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
}
@@ -1453,7 +1479,8 @@ define i8 @fun96(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1468,7 +1495,8 @@ define i16 @fun97(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1483,7 +1511,8 @@ define i32 @fun98(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1498,7 +1527,8 @@ define i64 @fun99(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1513,7 +1543,8 @@ define float @fun100(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1528,7 +1559,8 @@ define double @fun101(float %val1, float %val2, float %val3, float %val4,
; 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
}
@@ -1543,7 +1575,8 @@ define i8 @fun102(double %val1, double %val2, double %val3, double %val4,
; 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
}
@@ -1558,7 +1591,8 @@ define i16 @fun103(double %val1, double %val2, double %val3, double %val4,
; 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
}
@@ -1573,7 +1607,8 @@ define i32 @fun104(double %val1, double %val2, double %val3, double %val4,
; 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
}
@@ -1588,7 +1623,8 @@ define i64 @fun105(double %val1, double %val2, double %val3, double %val4,
; 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
}
@@ -1603,7 +1639,8 @@ define float @fun106(double %val1, double %val2, double %val3, double %val4,
; 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
}
@@ -1618,7 +1655,8 @@ define double @fun107(double %val1, double %val2, double %val3, double %val4,
; 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
}
OpenPOWER on IntegriCloud