@@ -235,37 +235,42 @@ func cmpxchg_test(_ ptr: Builtin.RawPointer, a: Builtin.Int32, b: Builtin.Int32)
235
235
// CHECK: [[Z_VAL:%.*]] = extractvalue { i32, i1 } [[Z_RES]], 0
236
236
// CHECK: [[Z_SUCCESS:%.*]] = extractvalue { i32, i1 } [[Z_RES]], 1
237
237
// 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
239
240
var ( z, zSuccess) = Builtin . cmpxchg_acquire_acquire_Int32 ( ptr, a, b)
240
241
241
242
// CHECK: [[Y_RES:%.*]] = cmpxchg volatile i32* {{.*}}, i32 {{.*}}, i32 {{.*}} monotonic monotonic
242
243
// CHECK: [[Y_VAL:%.*]] = extractvalue { i32, i1 } [[Y_RES]], 0
243
244
// CHECK: [[Y_SUCCESS:%.*]] = extractvalue { i32, i1 } [[Y_RES]], 1
244
245
// 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
246
248
var ( y, ySuccess) = Builtin . cmpxchg_monotonic_monotonic_volatile_Int32 ( ptr, a, b)
247
249
248
250
// CHECK: [[X_RES:%.*]] = cmpxchg volatile i32* {{.*}}, i32 {{.*}}, i32 {{.*}} syncscope("singlethread") acquire monotonic
249
251
// CHECK: [[X_VAL:%.*]] = extractvalue { i32, i1 } [[X_RES]], 0
250
252
// CHECK: [[X_SUCCESS:%.*]] = extractvalue { i32, i1 } [[X_RES]], 1
251
253
// 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
253
256
var ( x, xSuccess) = Builtin . cmpxchg_acquire_monotonic_volatile_singlethread_Int32 ( ptr, a, b)
254
257
255
258
// CHECK: [[W_RES:%.*]] = cmpxchg volatile i64* {{.*}}, i64 {{.*}}, i64 {{.*}} seq_cst seq_cst
256
259
// CHECK: [[W_VAL:%.*]] = extractvalue { i64, i1 } [[W_RES]], 0
257
260
// CHECK: [[W_SUCCESS:%.*]] = extractvalue { i64, i1 } [[W_RES]], 1
258
261
// CHECK: [[W_VAL_PTR:%.*]] = inttoptr i64 [[W_VAL]] to i8*
259
262
// 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
261
265
var ( w, wSuccess) = Builtin . cmpxchg_seqcst_seqcst_volatile_singlethread_RawPointer ( ptr, ptr, ptr)
262
266
263
267
// CHECK: [[V_RES:%.*]] = cmpxchg weak volatile i64* {{.*}}, i64 {{.*}}, i64 {{.*}} seq_cst seq_cst
264
268
// CHECK: [[V_VAL:%.*]] = extractvalue { i64, i1 } [[V_RES]], 0
265
269
// CHECK: [[V_SUCCESS:%.*]] = extractvalue { i64, i1 } [[V_RES]], 1
266
270
// CHECK: [[V_VAL_PTR:%.*]] = inttoptr i64 [[V_VAL]] to i8*
267
271
// 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
269
274
var ( v, vSuccess) = Builtin . cmpxchg_seqcst_seqcst_weak_volatile_singlethread_RawPointer ( ptr, ptr, ptr)
270
275
}
271
276
@@ -558,7 +563,8 @@ struct Pair { var i: Int, b: Bool }
558
563
// CHECK: [[FLDI:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 0
559
564
// CHECK: store i32 0, i32* [[FLDI]]
560
565
// 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]]
562
568
// CHECK: [[RET:%.*]] = getelementptr inbounds {{.*}} [[ALLOCA]], i32 0, i32 0
563
569
// CHECK: [[RES:%.*]] = load i64, i64* [[RET]]
564
570
// CHECK: ret i64 [[RES]]
@@ -575,7 +581,8 @@ func zeroInitializer() -> (Empty, Pair) {
575
581
// CHECK: [[FLDI:%.*]] = getelementptr inbounds {{.*}} [[PAIR]], i32 0, i32 0
576
582
// CHECK: store i32 0, i32* [[FLDI]]
577
583
// 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]]
579
586
// CHECK: [[RET:%.*]] = getelementptr inbounds {{.*}} [[ALLOCA]], i32 0, i32 0
580
587
// CHECK: [[RES:%.*]] = load i64, i64* [[RET]]
581
588
// CHECK: ret i64 [[RES]]
@@ -695,14 +702,16 @@ func generic_ispod_test<T>(_: T) {
695
702
// CHECK-NEXT: [[FLAGS:%.*]] = load i32, i32* [[T0]]
696
703
// CHECK-NEXT: [[ISNOTPOD:%.*]] = and i32 [[FLAGS]], 65536
697
704
// 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]]
699
708
var s = Builtin . ispod ( T . self)
700
709
}
701
710
702
711
// CHECK-LABEL: define {{.*}} @{{.*}}ispod_test
703
712
func 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 *
706
715
var t = Builtin . ispod ( Int . self)
707
716
var f = Builtin . ispod ( Builtin . NativeObject. self)
708
717
}
@@ -713,17 +722,19 @@ func generic_isbitwisetakable_test<T>(_: T) {
713
722
// CHECK-NEXT: [[FLAGS:%.*]] = load i32, i32* [[T0]]
714
723
// CHECK-NEXT: [[ISNOTBITWISETAKABLE:%.*]] = and i32 [[FLAGS]], 1048576
715
724
// 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]]
717
728
var s = Builtin . isbitwisetakable ( T . self)
718
729
}
719
730
720
731
// CHECK-LABEL: define {{.*}} @{{.*}}isbitwisetakable_test
721
732
func 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 *
727
738
var t1 = Builtin . isbitwisetakable ( Int . self)
728
739
var t2 = Builtin . isbitwisetakable ( C . self)
729
740
var t3 = Builtin . isbitwisetakable ( Abc . self)
0 commit comments