@@ -235,37 +235,42 @@ func cmpxchg_test(_ ptr: Builtin.RawPointer, a: Builtin.Int32, b: Builtin.Int32)
235235 // CHECK: [[Z_VAL:%.*]] = extractvalue { i32, i1 } [[Z_RES]], 0
236236 // CHECK: [[Z_SUCCESS:%.*]] = extractvalue { i32, i1 } [[Z_RES]], 1
237237 // CHECK: store i32 [[Z_VAL]], i32* {{.*}}, align 4
238- // CHECK: store i1 [[Z_SUCCESS]], i1* {{.*}}, align 1
238+ // CHECK: [[Z_SUCCESS_B:%.*]] = zext i1 [[Z_SUCCESS]] to i8
239+ // CHECK: store i8 [[Z_SUCCESS_B]], i8* {{.*}}, align 1
239240 var ( z, zSuccess) = Builtin . cmpxchg_acquire_acquire_Int32 ( ptr, a, b)
240241
241242 // CHECK: [[Y_RES:%.*]] = cmpxchg volatile i32* {{.*}}, i32 {{.*}}, i32 {{.*}} monotonic monotonic
242243 // CHECK: [[Y_VAL:%.*]] = extractvalue { i32, i1 } [[Y_RES]], 0
243244 // CHECK: [[Y_SUCCESS:%.*]] = extractvalue { i32, i1 } [[Y_RES]], 1
244245 // CHECK: store i32 [[Y_VAL]], i32* {{.*}}, align 4
245- // CHECK: store i1 [[Y_SUCCESS]], i1* {{.*}}, align 1
246+ // CHECK: [[Y_SUCCESS_B:%.*]] = zext i1 [[Y_SUCCESS]] to i8
247+ // CHECK: store i8 [[Y_SUCCESS_B]], i8* {{.*}}, align 1
246248 var ( y, ySuccess) = Builtin . cmpxchg_monotonic_monotonic_volatile_Int32 ( ptr, a, b)
247249
248250 // CHECK: [[X_RES:%.*]] = cmpxchg volatile i32* {{.*}}, i32 {{.*}}, i32 {{.*}} syncscope("singlethread") acquire monotonic
249251 // CHECK: [[X_VAL:%.*]] = extractvalue { i32, i1 } [[X_RES]], 0
250252 // CHECK: [[X_SUCCESS:%.*]] = extractvalue { i32, i1 } [[X_RES]], 1
251253 // CHECK: store i32 [[X_VAL]], i32* {{.*}}, align 4
252- // CHECK: store i1 [[X_SUCCESS]], i1* {{.*}}, align 1
254+ // CHECK: [[X_SUCCESS_B:%.*]] = zext i1 [[X_SUCCESS]] to i8
255+ // CHECK: store i8 [[X_SUCCESS_B]], i8* {{.*}}, align 1
253256 var ( x, xSuccess) = Builtin . cmpxchg_acquire_monotonic_volatile_singlethread_Int32 ( ptr, a, b)
254257
255258 // CHECK: [[W_RES:%.*]] = cmpxchg volatile i64* {{.*}}, i64 {{.*}}, i64 {{.*}} seq_cst seq_cst
256259 // CHECK: [[W_VAL:%.*]] = extractvalue { i64, i1 } [[W_RES]], 0
257260 // CHECK: [[W_SUCCESS:%.*]] = extractvalue { i64, i1 } [[W_RES]], 1
258261 // CHECK: [[W_VAL_PTR:%.*]] = inttoptr i64 [[W_VAL]] to i8*
259262 // CHECK: store i8* [[W_VAL_PTR]], i8** {{.*}}, align 8
260- // CHECK: store i1 [[W_SUCCESS]], i1* {{.*}}, align 1
263+ // CHECK: [[W_SUCCESS_B:%.*]] = zext i1 [[W_SUCCESS]] to i8
264+ // CHECK: store i8 [[W_SUCCESS_B]], i8* {{.*}}, align 1
261265 var ( w, wSuccess) = Builtin . cmpxchg_seqcst_seqcst_volatile_singlethread_RawPointer ( ptr, ptr, ptr)
262266
263267 // CHECK: [[V_RES:%.*]] = cmpxchg weak volatile i64* {{.*}}, i64 {{.*}}, i64 {{.*}} seq_cst seq_cst
264268 // CHECK: [[V_VAL:%.*]] = extractvalue { i64, i1 } [[V_RES]], 0
265269 // CHECK: [[V_SUCCESS:%.*]] = extractvalue { i64, i1 } [[V_RES]], 1
266270 // CHECK: [[V_VAL_PTR:%.*]] = inttoptr i64 [[V_VAL]] to i8*
267271 // CHECK: store i8* [[V_VAL_PTR]], i8** {{.*}}, align 8
268- // CHECK: store i1 [[V_SUCCESS]], i1* {{.*}}, align 1
272+ // CHECK: [[V_SUCCESS_B:%.*]] = zext i1 [[V_SUCCESS]] to i8
273+ // CHECK: store i8 [[V_SUCCESS_B]], i8* {{.*}}, align 1
269274 var ( v, vSuccess) = Builtin . cmpxchg_seqcst_seqcst_weak_volatile_singlethread_RawPointer ( ptr, ptr, ptr)
270275}
271276
@@ -558,7 +563,8 @@ struct Pair { var i: Int, b: Bool }
558563// CHECK: [[FLDI:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 0
559564// CHECK: store i32 0, i32* [[FLDI]]
560565// CHECK: [[FLDB:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 1
561- // CHECK: store i1 false, i1* [[FLDB]]
566+ // CHECK: [[BYTE_ADDR:%.*]] = bitcast i1* [[FLDB]] to i8*
567+ // CHECK: store i8 0, i8* [[BYTE_ADDR]]
562568// CHECK: [[RET:%.*]] = getelementptr inbounds {{.*}} [[ALLOCA]], i32 0, i32 0
563569// CHECK: [[RES:%.*]] = load i64, i64* [[RET]]
564570// CHECK: ret i64 [[RES]]
@@ -575,7 +581,8 @@ func zeroInitializer() -> (Empty, Pair) {
575581// CHECK: [[FLDI:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 0
576582// CHECK: store i32 0, i32* [[FLDI]]
577583// CHECK: [[FLDB:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 1
578- // CHECK: store i1 false, i1* [[FLDB]]
584+ // CHECK: [[BYTE_ADDR:%.*]] = bitcast i1* [[FLDB]] to i8*
585+ // CHECK: store i8 0, i8* [[BYTE_ADDR]]
579586// CHECK: [[RET:%.*]] = getelementptr inbounds {{.*}} [[ALLOCA]], i32 0, i32 0
580587// CHECK: [[RES:%.*]] = load i64, i64* [[RET]]
581588// CHECK: ret i64 [[RES]]
@@ -695,14 +702,16 @@ func generic_ispod_test<T>(_: T) {
695702 // CHECK-NEXT: [[FLAGS:%.*]] = load i32, i32* [[T0]]
696703 // CHECK-NEXT: [[ISNOTPOD:%.*]] = and i32 [[FLAGS]], 65536
697704 // CHECK-NEXT: [[ISPOD:%.*]] = icmp eq i32 [[ISNOTPOD]], 0
698- // CHECK-NEXT: store i1 [[ISPOD]], i1* [[S:%.*]]
705+ // CHECK-NEXT: [[BYTE_ADDR:%.*]] = bitcast i1* [[S:%.*]] to i8*
706+ // CHECK-NEXT: [[BYTE:%.*]] = zext i1 [[ISPOD]] to i8
707+ // CHECK-NEXT: store i8 [[BYTE]], i8* [[BYTE_ADDR]]
699708 var s = Builtin . ispod ( T . self)
700709}
701710
702711// CHECK-LABEL: define {{.*}} @{{.*}}ispod_test
703712func ispod_test( ) {
704- // CHECK: store i1 true, i1 *
705- // CHECK: store i1 false, i1 *
713+ // CHECK: store i8 1, i8 *
714+ // CHECK: store i8 0, i8 *
706715 var t = Builtin . ispod ( Int . self)
707716 var f = Builtin . ispod ( Builtin . NativeObject. self)
708717}
@@ -713,17 +722,19 @@ func generic_isbitwisetakable_test<T>(_: T) {
713722 // CHECK-NEXT: [[FLAGS:%.*]] = load i32, i32* [[T0]]
714723 // CHECK-NEXT: [[ISNOTBITWISETAKABLE:%.*]] = and i32 [[FLAGS]], 1048576
715724 // CHECK-NEXT: [[ISBITWISETAKABLE:%.*]] = icmp eq i32 [[ISNOTBITWISETAKABLE]], 0
716- // CHECK-NEXT: store i1 [[ISBITWISETAKABLE]], i1* [[S:%.*]]
725+ // CHECK-NEXT: [[BYTE_ADDR:%.*]] = bitcast i1* [[S:%.*]]
726+ // CHECK-NEXT: [[BYTE:%.*]] = zext i1 [[ISBITWISETAKABLE]] to i8
727+ // CHECK-NEXT: store i8 [[BYTE]], i8* [[BYTE_ADDR]]
717728 var s = Builtin . isbitwisetakable ( T . self)
718729}
719730
720731// CHECK-LABEL: define {{.*}} @{{.*}}isbitwisetakable_test
721732func isbitwisetakable_test( ) {
722- // CHECK: store i1 true, i1 *
723- // CHECK: store i1 true, i1 *
724- // CHECK: store i1 true, i1 *
725- // CHECK: store i1 true, i1 *
726- // CHECK: store i1 false, i1 *
733+ // CHECK: store i8 1, i8 *
734+ // CHECK: store i8 1, i8 *
735+ // CHECK: store i8 1, i8 *
736+ // CHECK: store i8 1, i8 *
737+ // CHECK: store i8 0, i8 *
727738 var t1 = Builtin . isbitwisetakable ( Int . self)
728739 var t2 = Builtin . isbitwisetakable ( C . self)
729740 var t3 = Builtin . isbitwisetakable ( Abc . self)
0 commit comments