|
1 | 1 | // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py |
2 | 2 | // RUN: %clang_cc1 -O0 -triple amdgcn---amdgiz -emit-llvm %s -o - | FileCheck %s |
3 | 3 |
|
| 4 | +void destroy(int x); |
| 5 | + |
| 6 | +class A { |
| 7 | + int x; |
| 8 | + |
| 9 | +public: |
| 10 | + A(); |
| 11 | + ~A(); |
| 12 | +}; |
| 13 | + |
| 14 | +// CHECK-LABEL: @_ZN1AC1Ev( |
| 15 | +// CHECK-NEXT: entry: |
| 16 | +// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8, addrspace(5) |
| 17 | +// CHECK-NEXT: [[THIS_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[THIS_ADDR]] to ptr |
| 18 | +// CHECK-NEXT: store ptr [[THIS:%.*]], ptr [[THIS_ADDR_ASCAST]], align 8 |
| 19 | +// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR_ASCAST]], align 8 |
| 20 | +// CHECK-NEXT: call void @_ZN1AC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) |
| 21 | +// CHECK-NEXT: ret void |
| 22 | +// |
| 23 | +A::A() : x(0) {} |
| 24 | + |
| 25 | +// CHECK-LABEL: @_ZN1AD1Ev( |
| 26 | +// CHECK-NEXT: entry: |
| 27 | +// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8, addrspace(5) |
| 28 | +// CHECK-NEXT: [[THIS_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[THIS_ADDR]] to ptr |
| 29 | +// CHECK-NEXT: store ptr [[THIS:%.*]], ptr [[THIS_ADDR_ASCAST]], align 8 |
| 30 | +// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR_ASCAST]], align 8 |
| 31 | +// CHECK-NEXT: call void @_ZN1AD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR2:[0-9]+]] |
| 32 | +// CHECK-NEXT: ret void |
| 33 | +// |
| 34 | +A::~A() { destroy(x); } |
| 35 | + |
4 | 36 | // CHECK-LABEL: @_Z5func1Pi( |
5 | 37 | // CHECK-NEXT: entry: |
6 | 38 | // CHECK-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8, addrspace(5) |
@@ -69,35 +101,6 @@ void func2(void) { |
69 | 101 | lv1 = lvc; |
70 | 102 | } |
71 | 103 |
|
72 | | -void destroy(int x); |
73 | | - |
74 | | -class A { |
75 | | -int x; |
76 | | -public: |
77 | | -// CHECK-LABEL: @_ZN1AC1Ev( |
78 | | -// CHECK-NEXT: entry: |
79 | | -// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8, addrspace(5) |
80 | | -// CHECK-NEXT: [[THIS_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[THIS_ADDR]] to ptr |
81 | | -// CHECK-NEXT: store ptr [[THIS:%.*]], ptr [[THIS_ADDR_ASCAST]], align 8 |
82 | | -// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR_ASCAST]], align 8 |
83 | | -// CHECK-NEXT: call void @_ZN1AC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) |
84 | | -// CHECK-NEXT: ret void |
85 | | -// |
86 | | - A():x(0) {} |
87 | | -// CHECK-LABEL: @_ZN1AD1Ev( |
88 | | -// CHECK-NEXT: entry: |
89 | | -// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8, addrspace(5) |
90 | | -// CHECK-NEXT: [[THIS_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[THIS_ADDR]] to ptr |
91 | | -// CHECK-NEXT: store ptr [[THIS:%.*]], ptr [[THIS_ADDR_ASCAST]], align 8 |
92 | | -// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR_ASCAST]], align 8 |
93 | | -// CHECK-NEXT: call void @_ZN1AD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR2:[0-9]+]] |
94 | | -// CHECK-NEXT: ret void |
95 | | -// |
96 | | - ~A() { |
97 | | - destroy(x); |
98 | | - } |
99 | | -}; |
100 | | - |
101 | 104 | // CHECK-LABEL: @_Z5func3v( |
102 | 105 | // CHECK-NEXT: entry: |
103 | 106 | // CHECK-NEXT: [[A:%.*]] = alloca [[CLASS_A:%.*]], align 4, addrspace(5) |
@@ -160,4 +163,3 @@ void func7() { |
160 | 163 | later: |
161 | 164 | use(&x); |
162 | 165 | } |
163 | | - |
|
0 commit comments