@@ -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,70 @@ 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: ret i1 false
1129
+ ;
1130
+ %cmp = icmp eq i8 %i , 0
1131
+ ret i1 %cmp
1132
+ }
1133
+
1134
+ define i1 @neg_icmp_eq_range_attr (i8 range(i8 -1 , 1 ) %i ) {
1135
+ ; CHECK-LABEL: @neg_icmp_eq_range_attr(
1136
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 0
1137
+ ; CHECK-NEXT: ret i1 [[CMP]]
1138
+ ;
1139
+ %cmp = icmp eq i8 %i , 0
1140
+ ret i1 %cmp
1141
+ }
1142
+
1143
+ declare range(i8 1 , 0 ) i8 @returns_non_zero_range_helper ()
1144
+ declare range(i8 -1 , 1 ) i8 @returns_contain_zero_range_helper ()
1145
+
1146
+ define i1 @icmp_eq_range_return () {
1147
+ ; CHECK-LABEL: @icmp_eq_range_return(
1148
+ ; CHECK-NEXT: [[I:%.*]] = call i8 @returns_non_zero_range_helper()
1149
+ ; CHECK-NEXT: ret i1 false
1150
+ ;
1151
+ %i = call i8 @returns_non_zero_range_helper ()
1152
+ %cmp = icmp eq i8 %i , 0
1153
+ ret i1 %cmp
1154
+ }
1155
+
1156
+ define i1 @neg_icmp_eq_range_return () {
1157
+ ; CHECK-LABEL: @neg_icmp_eq_range_return(
1158
+ ; CHECK-NEXT: [[I:%.*]] = call i8 @returns_contain_zero_range_helper()
1159
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1160
+ ; CHECK-NEXT: ret i1 [[CMP]]
1161
+ ;
1162
+ %i = call i8 @returns_contain_zero_range_helper ()
1163
+ %cmp = icmp eq i8 %i , 0
1164
+ ret i1 %cmp
1165
+ }
1166
+
1167
+ declare i8 @returns_i8_helper ()
1168
+
1169
+ define i1 @icmp_eq_range_call () {
1170
+ ; CHECK-LABEL: @icmp_eq_range_call(
1171
+ ; CHECK-NEXT: [[I:%.*]] = call range(i8 1, 0) i8 @returns_i8_helper()
1172
+ ; CHECK-NEXT: ret i1 false
1173
+ ;
1174
+ %i = call range(i8 1 , 0 ) i8 @returns_i8_helper ()
1175
+ %cmp = icmp eq i8 %i , 0
1176
+ ret i1 %cmp
1177
+ }
1178
+
1179
+ define i1 @neg_icmp_eq_range_call () {
1180
+ ; CHECK-LABEL: @neg_icmp_eq_range_call(
1181
+ ; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 11) i8 @returns_i8_helper()
1182
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1183
+ ; CHECK-NEXT: ret i1 [[CMP]]
1184
+ ;
1185
+ %i = call range(i8 0 , 11 ) i8 @returns_i8_helper ()
1186
+ %cmp = icmp eq i8 %i , 0
1187
+ ret i1 %cmp
1188
+ }
1189
+
1126
1190
declare i16 @llvm.ctlz.i16 (i16 , i1 )
1127
1191
declare i16 @llvm.cttz.i16 (i16 , i1 )
1128
1192
declare i16 @llvm.ctpop.i16 (i16 )
0 commit comments