@@ -6,9 +6,8 @@ declare void @use(i32)
66define i1 @test_i32_eq (i32 %x ) {
77; CHECK-LABEL: define i1 @test_i32_eq(
88; CHECK-SAME: i32 [[X:%.*]]) {
9- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 -95)
10- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.smin.i32(i32 [[V1]], i32 160)
11- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V2]], [[X]]
9+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[X]], 95
10+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], 256
1211; CHECK-NEXT: ret i1 [[CMP]]
1312;
1413 %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 -95 )
@@ -20,9 +19,8 @@ define i1 @test_i32_eq(i32 %x) {
2019define i1 @test_i32_ne (i32 %x ) {
2120; CHECK-LABEL: define i1 @test_i32_ne(
2221; CHECK-SAME: i32 [[X:%.*]]) {
23- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 -95)
24- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.smin.i32(i32 [[V1]], i32 160)
25- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[V2]], [[X]]
22+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[X]], -161
23+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], -256
2624; CHECK-NEXT: ret i1 [[CMP]]
2725;
2826 %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 -95 )
@@ -34,9 +32,7 @@ define i1 @test_i32_ne(i32 %x) {
3432define i1 @test_i32_eq_no_add (i32 %x ) {
3533; CHECK-LABEL: define i1 @test_i32_eq_no_add(
3634; CHECK-SAME: i32 [[X:%.*]]) {
37- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 0)
38- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.smin.i32(i32 [[V1]], i32 160)
39- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V2]], [[X]]
35+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X]], 161
4036; CHECK-NEXT: ret i1 [[CMP]]
4137;
4238 %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -48,9 +44,7 @@ define i1 @test_i32_eq_no_add(i32 %x) {
4844define i1 @test_i32_ne_no_add (i32 %x ) {
4945; CHECK-LABEL: define i1 @test_i32_ne_no_add(
5046; CHECK-SAME: i32 [[X:%.*]]) {
51- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 0)
52- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.smin.i32(i32 [[V1]], i32 160)
53- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[V2]], [[X]]
47+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X]], 160
5448; CHECK-NEXT: ret i1 [[CMP]]
5549;
5650 %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -62,9 +56,8 @@ define i1 @test_i32_ne_no_add(i32 %x) {
6256define i1 @test_unsigned_eq (i32 %x ) {
6357; CHECK-LABEL: define i1 @test_unsigned_eq(
6458; CHECK-SAME: i32 [[X:%.*]]) {
65- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.umax.i32(i32 [[X]], i32 10)
66- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.umin.i32(i32 [[V1]], i32 100)
67- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V2]], [[X]]
59+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[X]], -10
60+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], 91
6861; CHECK-NEXT: ret i1 [[CMP]]
6962;
7063 %v1 = tail call i32 @llvm.umax.i32 (i32 %x , i32 10 )
@@ -76,9 +69,8 @@ define i1 @test_unsigned_eq(i32 %x) {
7669define i1 @test_unsigned_ne (i32 %x ) {
7770; CHECK-LABEL: define i1 @test_unsigned_ne(
7871; CHECK-SAME: i32 [[X:%.*]]) {
79- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.umax.i32(i32 [[X]], i32 10)
80- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.umin.i32(i32 [[V1]], i32 100)
81- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[V2]], [[X]]
72+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[X]], -101
73+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], -91
8274; CHECK-NEXT: ret i1 [[CMP]]
8375;
8476 %v1 = tail call i32 @llvm.umax.i32 (i32 %x , i32 10 )
@@ -92,9 +84,8 @@ define i1 @test_unsigned_ne(i32 %x) {
9284define i1 @test_i8_eq (i8 %x ) {
9385; CHECK-LABEL: define i1 @test_i8_eq(
9486; CHECK-SAME: i8 [[X:%.*]]) {
95- ; CHECK-NEXT: [[V1:%.*]] = tail call i8 @llvm.smax.i8(i8 [[X]], i8 -50)
96- ; CHECK-NEXT: [[V2:%.*]] = tail call i8 @llvm.smin.i8(i8 [[V1]], i8 50)
97- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[V2]], [[X]]
87+ ; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[X]], 50
88+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[TMP1]], 101
9889; CHECK-NEXT: ret i1 [[CMP]]
9990;
10091 %v1 = tail call i8 @llvm.smax.i8 (i8 %x , i8 -50 )
@@ -106,9 +97,8 @@ define i1 @test_i8_eq(i8 %x) {
10697define i1 @test_i16_eq (i16 %x ) {
10798; CHECK-LABEL: define i1 @test_i16_eq(
10899; CHECK-SAME: i16 [[X:%.*]]) {
109- ; CHECK-NEXT: [[V1:%.*]] = tail call i16 @llvm.smax.i16(i16 [[X]], i16 -1000)
110- ; CHECK-NEXT: [[V2:%.*]] = tail call i16 @llvm.smin.i16(i16 [[V1]], i16 1000)
111- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[V2]], [[X]]
100+ ; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[X]], 1000
101+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i16 [[TMP1]], 2001
112102; CHECK-NEXT: ret i1 [[CMP]]
113103;
114104 %v1 = tail call i16 @llvm.smax.i16 (i16 %x , i16 -1000 )
@@ -120,9 +110,8 @@ define i1 @test_i16_eq(i16 %x) {
120110define i1 @test_i64_eq (i64 %x ) {
121111; CHECK-LABEL: define i1 @test_i64_eq(
122112; CHECK-SAME: i64 [[X:%.*]]) {
123- ; CHECK-NEXT: [[V1:%.*]] = tail call i64 @llvm.smax.i64(i64 [[X]], i64 -1)
124- ; CHECK-NEXT: [[V2:%.*]] = tail call i64 @llvm.smin.i64(i64 [[V1]], i64 9223372036854775806)
125- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[V2]], [[X]]
113+ ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[X]], 1
114+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[TMP1]], -1
126115; CHECK-NEXT: ret i1 [[CMP]]
127116;
128117 %v1 = tail call i64 @llvm.smax.i64 (i64 %x , i64 -1 )
@@ -250,9 +239,8 @@ define i1 @test_multi_use_min(i32 %x) {
250239define i1 @test_commuted_eq (i32 %x ) {
251240; CHECK-LABEL: define i1 @test_commuted_eq(
252241; CHECK-SAME: i32 [[X:%.*]]) {
253- ; CHECK-NEXT: [[V1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 -95)
254- ; CHECK-NEXT: [[V2:%.*]] = tail call i32 @llvm.smin.i32(i32 [[V1]], i32 160)
255- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[V2]]
242+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[X]], 95
243+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], 256
256244; CHECK-NEXT: ret i1 [[CMP]]
257245;
258246 %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 -95 )
@@ -266,9 +254,8 @@ define i1 @test_commuted_eq(i32 %x) {
266254define <2 x i1 > @test_vec_splat_eq (<2 x i32 > %x ) {
267255; CHECK-LABEL: define <2 x i1> @test_vec_splat_eq(
268256; CHECK-SAME: <2 x i32> [[X:%.*]]) {
269- ; CHECK-NEXT: [[V1:%.*]] = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> [[X]], <2 x i32> splat (i32 -50))
270- ; CHECK-NEXT: [[V2:%.*]] = tail call <2 x i32> @llvm.smin.v2i32(<2 x i32> [[V1]], <2 x i32> splat (i32 50))
271- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[V2]], [[X]]
257+ ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i32> [[X]], splat (i32 50)
258+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult <2 x i32> [[TMP1]], splat (i32 101)
272259; CHECK-NEXT: ret <2 x i1> [[CMP]]
273260;
274261 %v1 = tail call <2 x i32 > @llvm.smax.v2i32 (<2 x i32 > %x , <2 x i32 > <i32 -50 , i32 -50 >)
0 commit comments