1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --prefix-filecheck-ir-name V
22; RUN: opt < %s -passes=instcombine -S | FileCheck %s
33
44; https://bugs.llvm.org/show_bug.cgi?id=38446
@@ -22,10 +22,10 @@ declare i1 @gen1()
2222
2323define i1 @positive_easyinvert (i16 %x , i8 %y ) {
2424; CHECK-LABEL: @positive_easyinvert(
25- ; CHECK-NEXT: [[TMP1 :%.*]] = icmp slt i16 [[X :%.*]], 0
26- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp sgt i8 [[Y :%.*]], -1
27- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP2 ]], [[TMP1]]
28- ; CHECK-NEXT: ret i1 [[TMP4 ]]
25+ ; CHECK-NEXT: [[VTMP2 :%.*]] = icmp slt i8 [[Y :%.*]], 0
26+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp sgt i16 [[X :%.*]], -1
27+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[VTMP2 ]], [[TMP1]]
28+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
2929;
3030 %tmp1 = icmp slt i16 %x , 0
3131 %tmp2 = icmp slt i8 %y , 0
@@ -36,24 +36,24 @@ define i1 @positive_easyinvert(i16 %x, i8 %y) {
3636
3737define i1 @positive_easyinvert0 (i8 %y ) {
3838; CHECK-LABEL: @positive_easyinvert0(
39- ; CHECK-NEXT: [[TMP1 :%.*]] = call i1 @gen1()
40- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp sgt i8 [[Y:%.*]], -1
41- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP2 ]], [[TMP1 ]]
42- ; CHECK-NEXT: ret i1 [[TMP4 ]]
39+ ; CHECK-NEXT: [[VTMP1 :%.*]] = call i1 @gen1()
40+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp sgt i8 [[Y:%.*]], -1
41+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[TMP1 ]], [[VTMP1 ]]
42+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
4343;
4444 %tmp1 = call i1 @gen1 ()
45- %tmp2 = icmp slt i8 %y , 0
46- %tmp3 = xor i1 %tmp2 , %tmp1
45+ %cond = icmp slt i8 %y , 0
46+ %tmp3 = xor i1 %cond , %tmp1
4747 %tmp4 = xor i1 %tmp3 , true
4848 ret i1 %tmp4
4949}
5050
5151define i1 @positive_easyinvert1 (i8 %y ) {
5252; CHECK-LABEL: @positive_easyinvert1(
53- ; CHECK-NEXT: [[TMP1 :%.*]] = call i1 @gen1()
54- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp sgt i8 [[Y:%.*]], -1
55- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP2 ]], [[TMP1]]
56- ; CHECK-NEXT: ret i1 [[TMP4 ]]
53+ ; CHECK-NEXT: [[VTMP1 :%.*]] = call i1 @gen1()
54+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp sgt i8 [[Y:%.*]], -1
55+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[VTMP1 ]], [[TMP1]]
56+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
5757;
5858 %tmp1 = call i1 @gen1 ()
5959 %tmp2 = icmp slt i8 %y , 0
@@ -70,12 +70,12 @@ declare void @use1(i1)
7070
7171define i1 @oneuse_easyinvert_0 (i8 %y ) {
7272; CHECK-LABEL: @oneuse_easyinvert_0(
73- ; CHECK-NEXT: [[TMP1 :%.*]] = call i1 @gen1()
74- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
75- ; CHECK-NEXT: call void @use1(i1 [[TMP2 ]])
76- ; CHECK-NEXT: [[TMP3 :%.*]] = xor i1 [[TMP1 ]], [[TMP2 ]]
77- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP3 ]], true
78- ; CHECK-NEXT: ret i1 [[TMP4 ]]
73+ ; CHECK-NEXT: [[VTMP1 :%.*]] = call i1 @gen1()
74+ ; CHECK-NEXT: [[VTMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
75+ ; CHECK-NEXT: call void @use1(i1 [[VTMP2 ]])
76+ ; CHECK-NEXT: [[VTMP3 :%.*]] = xor i1 [[VTMP1 ]], [[VTMP2 ]]
77+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[VTMP3 ]], true
78+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
7979;
8080 %tmp1 = call i1 @gen1 ()
8181 %tmp2 = icmp slt i8 %y , 0
@@ -87,12 +87,12 @@ define i1 @oneuse_easyinvert_0(i8 %y) {
8787
8888define i1 @oneuse_easyinvert_1 (i8 %y ) {
8989; CHECK-LABEL: @oneuse_easyinvert_1(
90- ; CHECK-NEXT: [[TMP1 :%.*]] = call i1 @gen1()
91- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
92- ; CHECK-NEXT: [[TMP3 :%.*]] = xor i1 [[TMP1 ]], [[TMP2 ]]
93- ; CHECK-NEXT: call void @use1(i1 [[TMP3 ]])
94- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP3 ]], true
95- ; CHECK-NEXT: ret i1 [[TMP4 ]]
90+ ; CHECK-NEXT: [[VTMP1 :%.*]] = call i1 @gen1()
91+ ; CHECK-NEXT: [[VTMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
92+ ; CHECK-NEXT: [[VTMP3 :%.*]] = xor i1 [[VTMP1 ]], [[VTMP2 ]]
93+ ; CHECK-NEXT: call void @use1(i1 [[VTMP3 ]])
94+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[VTMP3 ]], true
95+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
9696;
9797 %tmp1 = call i1 @gen1 ()
9898 %tmp2 = icmp slt i8 %y , 0
@@ -104,13 +104,13 @@ define i1 @oneuse_easyinvert_1(i8 %y) {
104104
105105define i1 @oneuse_easyinvert_2 (i8 %y ) {
106106; CHECK-LABEL: @oneuse_easyinvert_2(
107- ; CHECK-NEXT: [[TMP1 :%.*]] = call i1 @gen1()
108- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
109- ; CHECK-NEXT: call void @use1(i1 [[TMP2 ]])
110- ; CHECK-NEXT: [[TMP3 :%.*]] = xor i1 [[TMP1 ]], [[TMP2 ]]
111- ; CHECK-NEXT: call void @use1(i1 [[TMP3 ]])
112- ; CHECK-NEXT: [[TMP4 :%.*]] = xor i1 [[TMP3 ]], true
113- ; CHECK-NEXT: ret i1 [[TMP4 ]]
107+ ; CHECK-NEXT: [[VTMP1 :%.*]] = call i1 @gen1()
108+ ; CHECK-NEXT: [[VTMP2 :%.*]] = icmp slt i8 [[Y:%.*]], 0
109+ ; CHECK-NEXT: call void @use1(i1 [[VTMP2 ]])
110+ ; CHECK-NEXT: [[VTMP3 :%.*]] = xor i1 [[VTMP1 ]], [[VTMP2 ]]
111+ ; CHECK-NEXT: call void @use1(i1 [[VTMP3 ]])
112+ ; CHECK-NEXT: [[VTMP4 :%.*]] = xor i1 [[VTMP3 ]], true
113+ ; CHECK-NEXT: ret i1 [[VTMP4 ]]
114114;
115115 %tmp1 = call i1 @gen1 ()
116116 %tmp2 = icmp slt i8 %y , 0
@@ -128,9 +128,9 @@ define i1 @oneuse_easyinvert_2(i8 %y) {
128128; Not easily invertible.
129129define i32 @negative (i32 %x , i32 %y ) {
130130; CHECK-LABEL: @negative(
131- ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
132- ; CHECK-NEXT: [[TMP2 :%.*]] = xor i32 [[TMP1 ]], -1
133- ; CHECK-NEXT: ret i32 [[TMP2 ]]
131+ ; CHECK-NEXT: [[VTMP1 :%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
132+ ; CHECK-NEXT: [[VTMP2 :%.*]] = xor i32 [[VTMP1 ]], -1
133+ ; CHECK-NEXT: ret i32 [[VTMP2 ]]
134134;
135135 %tmp1 = xor i32 %x , %y
136136 %tmp2 = xor i32 %tmp1 , -1
0 commit comments