@@ -102,9 +102,9 @@ if.end8:
102
102
define i32 @test4 (i32 %c ) nounwind {
103
103
; CHECK-LABEL: @test4(
104
104
; CHECK-NEXT: switch i32 [[C:%.*]], label [[SW_DEFAULT:%.*]] [
105
- ; CHECK-NEXT: i32 1, label [[SW_BB:%.*]]
106
- ; CHECK-NEXT: i32 2, label [[SW_BB]]
107
- ; CHECK-NEXT: i32 4, label [[SW_BB]]
105
+ ; CHECK-NEXT: i32 1, label [[SW_BB:%.*]]
106
+ ; CHECK-NEXT: i32 2, label [[SW_BB]]
107
+ ; CHECK-NEXT: i32 4, label [[SW_BB]]
108
108
; CHECK-NEXT: ]
109
109
; CHECK: sw.bb:
110
110
; CHECK-NEXT: br i1 true, label [[IF_THEN:%.*]], label [[IF_END:%.*]]
@@ -207,8 +207,8 @@ define i1 @test7(i32 %c) nounwind {
207
207
; CHECK-LABEL: @test7(
208
208
; CHECK-NEXT: entry:
209
209
; CHECK-NEXT: switch i32 [[C:%.*]], label [[SW_DEFAULT:%.*]] [
210
- ; CHECK-NEXT: i32 6, label [[SW_BB:%.*]]
211
- ; CHECK-NEXT: i32 7, label [[SW_BB]]
210
+ ; CHECK-NEXT: i32 6, label [[SW_BB:%.*]]
211
+ ; CHECK-NEXT: i32 7, label [[SW_BB]]
212
212
; CHECK-NEXT: ]
213
213
; CHECK: sw.bb:
214
214
; CHECK-NEXT: ret i1 true
@@ -790,8 +790,8 @@ define i32 @test18(i8 %a) {
790
790
; CHECK-NEXT: br label [[DISPATCH:%.*]]
791
791
; CHECK: dispatch:
792
792
; CHECK-NEXT: switch i8 [[A]], label [[DISPATCH]] [
793
- ; CHECK-NEXT: i8 93, label [[TARGET93:%.*]]
794
- ; CHECK-NEXT: i8 -111, label [[DISPATCH]]
793
+ ; CHECK-NEXT: i8 93, label [[TARGET93:%.*]]
794
+ ; CHECK-NEXT: i8 -111, label [[DISPATCH]]
795
795
; CHECK-NEXT: ]
796
796
; CHECK: target93:
797
797
; CHECK-NEXT: ret i32 93
@@ -817,8 +817,8 @@ define i8 @test19(i8 %a) {
817
817
; CHECK-NEXT: br label [[DISPATCH:%.*]]
818
818
; CHECK: dispatch:
819
819
; CHECK-NEXT: switch i8 [[A]], label [[DISPATCH]] [
820
- ; CHECK-NEXT: i8 93, label [[TARGET93:%.*]]
821
- ; CHECK-NEXT: i8 -111, label [[DISPATCH]]
820
+ ; CHECK-NEXT: i8 93, label [[TARGET93:%.*]]
821
+ ; CHECK-NEXT: i8 -111, label [[DISPATCH]]
822
822
; CHECK-NEXT: ]
823
823
; CHECK: target93:
824
824
; CHECK-NEXT: ret i8 96
@@ -846,8 +846,8 @@ define i1 @test20(i64 %a) {
846
846
; CHECK-NEXT: br label [[DISPATCH:%.*]]
847
847
; CHECK: dispatch:
848
848
; CHECK-NEXT: switch i64 [[A]], label [[DEFAULT:%.*]] [
849
- ; CHECK-NEXT: i64 0, label [[EXIT2:%.*]]
850
- ; CHECK-NEXT: i64 -2147483647, label [[EXIT2]]
849
+ ; CHECK-NEXT: i64 0, label [[EXIT2:%.*]]
850
+ ; CHECK-NEXT: i64 -2147483647, label [[EXIT2]]
851
851
; CHECK-NEXT: ]
852
852
; CHECK: default:
853
853
; CHECK-NEXT: [[C:%.*]] = icmp eq i64 [[B]], 0
@@ -1123,6 +1123,73 @@ else:
1123
1123
ret i1 true
1124
1124
}
1125
1125
1126
+ define i1 @icmp_eq_range_attr (i8 range(i8 1 , 0 ) %i ) {
1127
+ ; CHECK-LABEL: @icmp_eq_range_attr(
1128
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 0
1129
+ ; CHECK-NEXT: ret i1 [[CMP]]
1130
+ ;
1131
+ %cmp = icmp eq i8 %i , 0
1132
+ ret i1 %cmp
1133
+ }
1134
+
1135
+ define i1 @neg_icmp_eq_range_attr (i8 range(i8 -1 , 1 ) %i ) {
1136
+ ; CHECK-LABEL: @neg_icmp_eq_range_attr(
1137
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 0
1138
+ ; CHECK-NEXT: ret i1 [[CMP]]
1139
+ ;
1140
+ %cmp = icmp eq i8 %i , 0
1141
+ ret i1 %cmp
1142
+ }
1143
+
1144
+ declare range(i8 1 , 0 ) i8 @returns_non_zero_range_helper ()
1145
+ declare range(i8 -1 , 1 ) i8 @returns_contain_zero_range_helper ()
1146
+
1147
+ define i1 @icmp_eq_range_return () {
1148
+ ; CHECK-LABEL: @icmp_eq_range_return(
1149
+ ; CHECK-NEXT: [[I:%.*]] = call i8 @returns_non_zero_range_helper()
1150
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1151
+ ; CHECK-NEXT: ret i1 [[CMP]]
1152
+ ;
1153
+ %i = call i8 @returns_non_zero_range_helper ()
1154
+ %cmp = icmp eq i8 %i , 0
1155
+ ret i1 %cmp
1156
+ }
1157
+
1158
+ define i1 @neg_icmp_eq_range_return () {
1159
+ ; CHECK-LABEL: @neg_icmp_eq_range_return(
1160
+ ; CHECK-NEXT: [[I:%.*]] = call i8 @returns_contain_zero_range_helper()
1161
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1162
+ ; CHECK-NEXT: ret i1 [[CMP]]
1163
+ ;
1164
+ %i = call i8 @returns_contain_zero_range_helper ()
1165
+ %cmp = icmp eq i8 %i , 0
1166
+ ret i1 %cmp
1167
+ }
1168
+
1169
+ declare i8 @returns_i8_helper ()
1170
+
1171
+ define i1 @icmp_eq_range_call () {
1172
+ ; CHECK-LABEL: @icmp_eq_range_call(
1173
+ ; CHECK-NEXT: [[I:%.*]] = call range(i8 1, 0) i8 @returns_i8_helper()
1174
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1175
+ ; CHECK-NEXT: ret i1 [[CMP]]
1176
+ ;
1177
+ %i = call range(i8 1 , 0 ) i8 @returns_i8_helper ()
1178
+ %cmp = icmp eq i8 %i , 0
1179
+ ret i1 %cmp
1180
+ }
1181
+
1182
+ define i1 @neg_icmp_eq_range_call () {
1183
+ ; CHECK-LABEL: @neg_icmp_eq_range_call(
1184
+ ; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 11) i8 @returns_i8_helper()
1185
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1186
+ ; CHECK-NEXT: ret i1 [[CMP]]
1187
+ ;
1188
+ %i = call range(i8 0 , 11 ) i8 @returns_i8_helper ()
1189
+ %cmp = icmp eq i8 %i , 0
1190
+ ret i1 %cmp
1191
+ }
1192
+
1126
1193
declare i16 @llvm.ctlz.i16 (i16 , i1 )
1127
1194
declare i16 @llvm.cttz.i16 (i16 , i1 )
1128
1195
declare i16 @llvm.ctpop.i16 (i16 )
0 commit comments