@@ -17,9 +17,9 @@ using ri2_t = int __attribute__((address_space(2))) &;
1717void test_ptr () {
1818 pi1_t ptr1;
1919 pi2_t ptr2 = (pi2_t )ptr1;
20- // CIR: %[[#PTR1:]] = cir.load{{.*}} %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32
21- // CIR-NEXT: %[[#CAST:]] = cir.cast( address_space, %[[#PTR1]] : !cir.ptr<!s32i, addrspace(target<1>)>), !cir.ptr<!s32i, addrspace(target<2> )>
22- // CIR-NEXT: cir.store{{.*}} %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<2> )>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<2> )>>
20+ // CIR: %[[#PTR1:]] = cir.load align(8) %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
21+ // CIR-NEXT: %[[#CAST:]] = cir.cast address_space %[[#PTR1]] : !cir.ptr<!s32i, target_address_space(1)> -> !cir.ptr<!s32i, target_address_space(2 )>
22+ // CIR-NEXT: cir.store align(8) %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2 )>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2 )>>
2323
2424 // LLVM: %[[#PTR1:]] = load ptr addrspace(1), ptr %{{[0-9]+}}, align 8
2525 // LLVM-NEXT: %[[#CAST:]] = addrspacecast ptr addrspace(1) %[[#PTR1]] to ptr addrspace(2)
@@ -37,15 +37,15 @@ void test_ref() {
3737 pi1_t ptr;
3838 ri1_t ref1 = *ptr;
3939 ri2_t ref2 = (ri2_t )ref1;
40- // CIR: %[[#DEREF:]] = cir.load deref{{.*}} %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, addrspace(target<1> )>>, !cir.ptr<!s32i, addrspace(target<1> )>
41- // CIR-NEXT: cir.store{{.*}} %[[#DEREF]], %[[#ALLOCAREF1:]] : !cir.ptr<!s32i, addrspace(target<1> )>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<1> )>>
42- // CIR-NEXT: %[[#REF1:]] = cir.load{{.* }} %[[#ALLOCAREF1]] : !cir.ptr<!cir.ptr<!s32i, addrspace(target<1> )>>, !cir.ptr<!s32i, addrspace(target<1> )>
43- // CIR-NEXT: %[[#CAST:]] = cir.cast( address_space, %[[#REF1]] : !cir.ptr<!s32i, addrspace(target<1>)>), !cir.ptr<!s32i, addrspace(target<2> )>
44- // CIR-NEXT: cir.store{{.*}} %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<2> )>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<2> )>>
40+ // CIR: %[[#DEREF:]] = cir.load deref align(8) %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1 )>>, !cir.ptr<!s32i, target_address_space(1 )>
41+ // CIR-NEXT: cir.store align(8) %[[#DEREF]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(1 )>, !cir.ptr<!cir.ptr<!s32i, target_address_space(1 )>>
42+ // CIR-NEXT: %[[#REF1:]] = cir.load %{{[0-9]+ }} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1 )>>, !cir.ptr<!s32i, target_address_space(1 )>
43+ // CIR-NEXT: %[[#CAST:]] = cir.cast address_space %[[#REF1]] : !cir.ptr<!s32i, target_address_space(1)> -> !cir.ptr<!s32i, target_address_space(2 )>
44+ // CIR-NEXT: cir.store align(8) %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2 )>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2 )>>
4545
4646 // LLVM: %[[#DEREF:]] = load ptr addrspace(1), ptr %{{[0-9]+}}, align 8
47- // LLVM-NEXT: store ptr addrspace(1) %[[#DEREF]], ptr %[[#ALLOCAREF1:]] , align 8
48- // LLVM-NEXT: %[[#REF1:]] = load ptr addrspace(1), ptr %[[#ALLOCAREF1]] , align 8
47+ // LLVM-NEXT: store ptr addrspace(1) %[[#DEREF]], ptr %{{[0-9]+}} , align 8
48+ // LLVM-NEXT: %[[#REF1:]] = load ptr addrspace(1), ptr %{{[0-9]+}} , align 8
4949 // LLVM-NEXT: %[[#CAST:]] = addrspacecast ptr addrspace(1) %[[#REF1]] to ptr addrspace(2)
5050 // LLVM-NEXT: store ptr addrspace(2) %[[#CAST]], ptr %{{[0-9]+}}, align 8
5151
@@ -62,10 +62,10 @@ void test_ref() {
6262void test_nullptr () {
6363 constexpr pi1_t null1 = nullptr ;
6464 pi2_t ptr = (pi2_t )null1;
65- // CIR: %[[#NULL1:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, addrspace(target<1> )>
66- // CIR-NEXT: cir.store{{.*}} %[[#NULL1]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<1> )>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<1> )>>
67- // CIR-NEXT: %[[#NULL2:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, addrspace(target<2> )>
68- // CIR-NEXT: cir.store{{.*}} %[[#NULL2]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<2> )>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<2> )>>
65+ // CIR: %[[#NULL1:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(1 )>
66+ // CIR-NEXT: cir.store align(8) %[[#NULL1]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(1 )>, !cir.ptr<!cir.ptr<!s32i, target_address_space(1 )>>
67+ // CIR-NEXT: %[[#NULL2:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(2 )>
68+ // CIR-NEXT: cir.store align(8) %[[#NULL2]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2 )>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2 )>>
6969
7070 // LLVM: store ptr addrspace(1) null, ptr %{{[0-9]+}}, align 8
7171 // LLVM-NEXT: store ptr addrspace(2) null, ptr %{{[0-9]+}}, align 8
@@ -74,16 +74,19 @@ void test_nullptr() {
7474 // OGCG-NEXT: store ptr addrspace(2) null, ptr %{{.*}}, align 8
7575}
7676
77+ // CIR: cir.func dso_local @{{.*test_side_effect.*}}
78+ // LLVM: define dso_local void @{{.*test_side_effect.*}}
79+ // OGCG: define dso_local void @{{.*test_side_effect.*}}
7780void test_side_effect (pi1_t b) {
7881 pi2_t p = (pi2_t )(*b++, (int *)0 );
79- // CIR: %{{[0-9]+}} = cir.ptr_stride(%{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<1>)>, %{{[0-9]+}} : !s32i), !cir.ptr<!s32i, addrspace(target<1>)>
80- // CIR: %[[#CAST:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, addrspace(target<2>)>
81- // CIR-NEXT: cir.store{{.*}} %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, addrspace(target<2>)>, !cir.ptr<!cir.ptr<!s32i, addrspace(target<2>)>>
82+ // CIR: %[[#DEREF:]] = cir.load deref align(8) %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
83+ // CIR: %[[#STRIDE:]] = cir.ptr_stride(%[[#DEREF]] : !cir.ptr<!s32i, target_address_space(1)>, %{{[0-9]+}} : !s32i), !cir.ptr<!s32i, target_address_space(1)>
84+ // CIR: %[[#NULL:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(2)>
85+ // CIR-NEXT: cir.store align(8) %[[#NULL]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2)>>
8286
83- // LLVM: %{{[0-9]+}} = getelementptr i32, ptr addrspace(1) %{{[0-9]+}}, i64 1
87+ // LLVM: %{{[0-9]+}} = getelementptr {{.*}} i32, ptr addrspace(1) %{{[0-9]+}}, i{{32|64}} 1
8488 // LLVM: store ptr addrspace(2) null, ptr %{{[0-9]+}}, align 8
8589
8690 // OGCG: %{{.*}} = getelementptr{{.*}} i32, ptr addrspace(1) %{{.*}}, i32 1
8791 // OGCG: store ptr addrspace(2) null, ptr %{{.*}}, align 8
88-
8992}
0 commit comments