@@ -1060,9 +1060,10 @@ define <2 x i32> @test63vec(<2 x i32> %A) {
1060
1060
; FIXME: Transform (neg (max ~X, C)) -> ((min X, ~C) + 1). Same for min.
1061
1061
define i32 @test64 (i32 %x ) {
1062
1062
; CHECK-LABEL: @test64(
1063
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp slt i32 [[X:%.*]], 255
1064
- ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], i32 [[X]], i32 255
1065
- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[TMP2]], 1
1063
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], -1
1064
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp sgt i32 [[TMP1]], -256
1065
+ ; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], i32 [[TMP1]], i32 -256
1066
+ ; CHECK-NEXT: [[RES:%.*]] = sub i32 0, [[TMP3]]
1066
1067
; CHECK-NEXT: ret i32 [[RES]]
1067
1068
;
1068
1069
%1 = xor i32 %x , -1
@@ -1074,9 +1075,10 @@ define i32 @test64(i32 %x) {
1074
1075
1075
1076
define i32 @test65 (i32 %x ) {
1076
1077
; CHECK-LABEL: @test65(
1077
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp sgt i32 [[X:%.*]], -256
1078
- ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], i32 [[X]], i32 -256
1079
- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[TMP2]], 1
1078
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], -1
1079
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp slt i32 [[TMP1]], 255
1080
+ ; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], i32 [[TMP1]], i32 255
1081
+ ; CHECK-NEXT: [[RES:%.*]] = sub i32 0, [[TMP3]]
1080
1082
; CHECK-NEXT: ret i32 [[RES]]
1081
1083
;
1082
1084
%1 = xor i32 %x , -1
@@ -1088,9 +1090,10 @@ define i32 @test65(i32 %x) {
1088
1090
1089
1091
define i32 @test66 (i32 %x ) {
1090
1092
; CHECK-LABEL: @test66(
1091
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i32 [[X:%.*]], -101
1092
- ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], i32 [[X]], i32 -101
1093
- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[TMP2]], 1
1093
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], -1
1094
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ugt i32 [[TMP1]], 100
1095
+ ; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], i32 [[TMP1]], i32 100
1096
+ ; CHECK-NEXT: [[RES:%.*]] = sub i32 0, [[TMP3]]
1094
1097
; CHECK-NEXT: ret i32 [[RES]]
1095
1098
;
1096
1099
%1 = xor i32 %x , -1
@@ -1102,9 +1105,10 @@ define i32 @test66(i32 %x) {
1102
1105
1103
1106
define i32 @test67 (i32 %x ) {
1104
1107
; CHECK-LABEL: @test67(
1105
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp ugt i32 [[X:%.*]], 100
1106
- ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], i32 [[X]], i32 100
1107
- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[TMP2]], 1
1108
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], -1
1109
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i32 [[TMP1]], -101
1110
+ ; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], i32 [[TMP1]], i32 -101
1111
+ ; CHECK-NEXT: [[RES:%.*]] = sub i32 0, [[TMP3]]
1108
1112
; CHECK-NEXT: ret i32 [[RES]]
1109
1113
;
1110
1114
%1 = xor i32 %x , -1
@@ -1117,9 +1121,10 @@ define i32 @test67(i32 %x) {
1117
1121
; Check splat vectors too
1118
1122
define <2 x i32 > @test68 (<2 x i32 > %x ) {
1119
1123
; CHECK-LABEL: @test68(
1120
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp slt <2 x i32> [[X:%.*]], <i32 255, i32 255>
1121
- ; CHECK-NEXT: [[TMP2:%.*]] = select <2 x i1> [[TMP1]], <2 x i32> [[X]], <2 x i32> <i32 255, i32 255>
1122
- ; CHECK-NEXT: [[RES:%.*]] = add <2 x i32> [[TMP2]], <i32 1, i32 1>
1124
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <2 x i32> [[X:%.*]], <i32 -1, i32 -1>
1125
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp sgt <2 x i32> [[TMP1]], <i32 -256, i32 -256>
1126
+ ; CHECK-NEXT: [[TMP3:%.*]] = select <2 x i1> [[TMP2]], <2 x i32> [[TMP1]], <2 x i32> <i32 -256, i32 -256>
1127
+ ; CHECK-NEXT: [[RES:%.*]] = sub <2 x i32> zeroinitializer, [[TMP3]]
1123
1128
; CHECK-NEXT: ret <2 x i32> [[RES]]
1124
1129
;
1125
1130
%1 = xor <2 x i32 > %x , <i32 -1 , i32 -1 >
@@ -1132,9 +1137,10 @@ define <2 x i32> @test68(<2 x i32> %x) {
1132
1137
; And non-splat constant vectors.
1133
1138
define <2 x i32 > @test69 (<2 x i32 > %x ) {
1134
1139
; CHECK-LABEL: @test69(
1135
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp slt <2 x i32> [[X:%.*]], <i32 255, i32 127>
1136
- ; CHECK-NEXT: [[TMP2:%.*]] = select <2 x i1> [[TMP1]], <2 x i32> [[X]], <2 x i32> <i32 255, i32 127>
1137
- ; CHECK-NEXT: [[RES:%.*]] = add <2 x i32> [[TMP2]], <i32 1, i32 1>
1140
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <2 x i32> [[X:%.*]], <i32 -1, i32 -1>
1141
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp sgt <2 x i32> [[TMP1]], <i32 -256, i32 -128>
1142
+ ; CHECK-NEXT: [[TMP3:%.*]] = select <2 x i1> [[TMP2]], <2 x i32> [[TMP1]], <2 x i32> <i32 -256, i32 -128>
1143
+ ; CHECK-NEXT: [[RES:%.*]] = sub <2 x i32> zeroinitializer, [[TMP3]]
1138
1144
; CHECK-NEXT: ret <2 x i32> [[RES]]
1139
1145
;
1140
1146
%1 = xor <2 x i32 > %x , <i32 -1 , i32 -1 >
0 commit comments