Skip to content

Commit f2d301f

Browse files
Revert "[codegen] Store address of indirect arguments on the stack"
This reverts commit 7e4447a.
1 parent 9f1521b commit f2d301f

24 files changed

+16
-278
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,6 @@ Non-comprehensive list of changes in this release
500500
- Clang can now generate a PCH when using ``-fdelayed-template-parsing`` for
501501
code with templates containing loop hint pragmas, OpenMP pragmas, and
502502
``#pragma unused``.
503-
- Clang now saves the address of ABI-indirect function parameters on the stack,
504-
improving the debug information available in programs compiled without
505-
optimizations.
506503

507504

508505
New Compiler Flags

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4822,10 +4822,9 @@ void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(
48224822

48234823
llvm::DILocalVariable *
48244824
CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI,
4825-
unsigned ArgNo, CGBuilderTy &Builder,
4826-
const bool UsePointerValue) {
4825+
unsigned ArgNo, CGBuilderTy &Builder) {
48274826
assert(CGM.getCodeGenOpts().hasReducedDebugInfo());
4828-
return EmitDeclare(VD, AI, ArgNo, Builder, UsePointerValue);
4827+
return EmitDeclare(VD, AI, ArgNo, Builder);
48294828
}
48304829

48314830
namespace {

clang/lib/CodeGen/CGDebugInfo.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,9 +487,10 @@ class CGDebugInfo {
487487

488488
/// Emit call to \c llvm.dbg.declare for an argument variable
489489
/// declaration.
490-
llvm::DILocalVariable *
491-
EmitDeclareOfArgVariable(const VarDecl *Decl, llvm::Value *AI, unsigned ArgNo,
492-
CGBuilderTy &Builder, bool UsePointerValue = false);
490+
llvm::DILocalVariable *EmitDeclareOfArgVariable(const VarDecl *Decl,
491+
llvm::Value *AI,
492+
unsigned ArgNo,
493+
CGBuilderTy &Builder);
493494

494495
/// Emit call to \c llvm.dbg.declare for the block-literal argument
495496
/// to a block invocation function.

clang/lib/CodeGen/CGDecl.cpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2476,8 +2476,6 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, ParamValue Arg,
24762476
Address AllocaPtr = Address::invalid();
24772477
bool DoStore = false;
24782478
bool IsScalar = hasScalarEvaluationKind(Ty);
2479-
bool UseIndirectDebugAddress = false;
2480-
24812479
// If we already have a pointer to the argument, reuse the input pointer.
24822480
if (Arg.isIndirect()) {
24832481
// If we have a prettier pointer type at this point, bitcast to that.
@@ -2489,19 +2487,6 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, ParamValue Arg,
24892487
auto AllocaAS = CGM.getASTAllocaAddressSpace();
24902488
auto *V = DeclPtr.getPointer();
24912489
AllocaPtr = DeclPtr;
2492-
2493-
// For truly ABI indirect arguments -- those that are not `byval` -- store
2494-
// the address of the argument on the stack to preserve debug information.
2495-
ABIArgInfo ArgInfo = CurFnInfo->arguments()[ArgNo - 1].info;
2496-
if (ArgInfo.isIndirect())
2497-
UseIndirectDebugAddress = !ArgInfo.getIndirectByVal();
2498-
if (UseIndirectDebugAddress) {
2499-
auto PtrTy = getContext().getPointerType(Ty);
2500-
AllocaPtr = CreateMemTemp(PtrTy, getContext().getTypeAlignInChars(PtrTy),
2501-
D.getName() + ".indirect_addr");
2502-
EmitStoreOfScalar(V, AllocaPtr, /* Volatile */ false, PtrTy);
2503-
}
2504-
25052490
auto SrcLangAS = getLangOpts().OpenCL ? LangAS::opencl_private : AllocaAS;
25062491
auto DestLangAS =
25072492
getLangOpts().OpenCL ? LangAS::opencl_private : LangAS::Default;
@@ -2618,7 +2603,7 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, ParamValue Arg,
26182603
if (CGM.getCodeGenOpts().hasReducedDebugInfo() && !CurFuncIsThunk &&
26192604
!NoDebugInfo) {
26202605
llvm::DILocalVariable *DILocalVar = DI->EmitDeclareOfArgVariable(
2621-
&D, AllocaPtr.getPointer(), ArgNo, Builder, UseIndirectDebugAddress);
2606+
&D, AllocaPtr.getPointer(), ArgNo, Builder);
26222607
if (const auto *Var = dyn_cast_or_null<ParmVarDecl>(&D))
26232608
DI->getParamDbgMappings().insert({Var, DILocalVar});
26242609
}

clang/test/CodeGen/aarch64-ls64.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,10 @@ EXTERN_C void test_ld64b(void)
9494
// CHECK-C-LABEL: define {{[^@]+}}@test_st64b(
9595
// CHECK-C-NEXT: entry:
9696
// CHECK-C-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
97-
// CHECK-C-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
9897
// CHECK-C-NEXT: [[BYVAL_TEMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
9998
// CHECK-C-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
10099
// CHECK-C-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[BYVAL_TEMP]], ptr align 8 @val, i64 64, i1 false)
101100
// CHECK-C-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
102-
// CHECK-C-NEXT: store ptr [[BYVAL_TEMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
103101
// CHECK-C-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
104102
// CHECK-C-NEXT: [[TMP2:%.*]] = load i64, ptr [[BYVAL_TEMP]], align 8
105103
// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[BYVAL_TEMP]], i32 1
@@ -122,12 +120,10 @@ EXTERN_C void test_ld64b(void)
122120
// CHECK-CXX-LABEL: define {{[^@]+}}@test_st64b(
123121
// CHECK-CXX-NEXT: entry:
124122
// CHECK-CXX-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
125-
// CHECK-CXX-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
126123
// CHECK-CXX-NEXT: [[AGG_TMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
127124
// CHECK-CXX-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
128125
// CHECK-CXX-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TMP]], ptr align 8 @val, i64 64, i1 false)
129126
// CHECK-CXX-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
130-
// CHECK-CXX-NEXT: store ptr [[AGG_TMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
131127
// CHECK-CXX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
132128
// CHECK-CXX-NEXT: [[TMP2:%.*]] = load i64, ptr [[AGG_TMP]], align 8
133129
// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[AGG_TMP]], i32 1
@@ -155,12 +151,10 @@ EXTERN_C void test_st64b(void)
155151
// CHECK-C-LABEL: define {{[^@]+}}@test_st64bv(
156152
// CHECK-C-NEXT: entry:
157153
// CHECK-C-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
158-
// CHECK-C-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
159154
// CHECK-C-NEXT: [[BYVAL_TEMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
160155
// CHECK-C-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
161156
// CHECK-C-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[BYVAL_TEMP]], ptr align 8 @val, i64 64, i1 false)
162157
// CHECK-C-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
163-
// CHECK-C-NEXT: store ptr [[BYVAL_TEMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
164158
// CHECK-C-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
165159
// CHECK-C-NEXT: [[TMP2:%.*]] = load i64, ptr [[BYVAL_TEMP]], align 8
166160
// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[BYVAL_TEMP]], i32 1
@@ -184,12 +178,10 @@ EXTERN_C void test_st64b(void)
184178
// CHECK-CXX-LABEL: define {{[^@]+}}@test_st64bv(
185179
// CHECK-CXX-NEXT: entry:
186180
// CHECK-CXX-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
187-
// CHECK-CXX-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
188181
// CHECK-CXX-NEXT: [[AGG_TMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
189182
// CHECK-CXX-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
190183
// CHECK-CXX-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TMP]], ptr align 8 @val, i64 64, i1 false)
191184
// CHECK-CXX-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
192-
// CHECK-CXX-NEXT: store ptr [[AGG_TMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
193185
// CHECK-CXX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
194186
// CHECK-CXX-NEXT: [[TMP2:%.*]] = load i64, ptr [[AGG_TMP]], align 8
195187
// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[AGG_TMP]], i32 1
@@ -218,12 +210,10 @@ EXTERN_C void test_st64bv(void)
218210
// CHECK-C-LABEL: define {{[^@]+}}@test_st64bv0(
219211
// CHECK-C-NEXT: entry:
220212
// CHECK-C-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
221-
// CHECK-C-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
222213
// CHECK-C-NEXT: [[BYVAL_TEMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
223214
// CHECK-C-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
224215
// CHECK-C-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[BYVAL_TEMP]], ptr align 8 @val, i64 64, i1 false)
225216
// CHECK-C-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
226-
// CHECK-C-NEXT: store ptr [[BYVAL_TEMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
227217
// CHECK-C-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
228218
// CHECK-C-NEXT: [[TMP2:%.*]] = load i64, ptr [[BYVAL_TEMP]], align 8
229219
// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[BYVAL_TEMP]], i32 1
@@ -247,12 +237,10 @@ EXTERN_C void test_st64bv(void)
247237
// CHECK-CXX-LABEL: define {{[^@]+}}@test_st64bv0(
248238
// CHECK-CXX-NEXT: entry:
249239
// CHECK-CXX-NEXT: [[__ADDR_ADDR_I:%.*]] = alloca ptr, align 8
250-
// CHECK-CXX-NEXT: [[VALUE_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
251240
// CHECK-CXX-NEXT: [[AGG_TMP:%.*]] = alloca [[STRUCT_DATA512_T:%.*]], align 8
252241
// CHECK-CXX-NEXT: [[TMP0:%.*]] = load ptr, ptr @addr, align 8
253242
// CHECK-CXX-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TMP]], ptr align 8 @val, i64 64, i1 false)
254243
// CHECK-CXX-NEXT: store ptr [[TMP0]], ptr [[__ADDR_ADDR_I]], align 8
255-
// CHECK-CXX-NEXT: store ptr [[AGG_TMP]], ptr [[VALUE_INDIRECT_ADDR]], align 8
256244
// CHECK-CXX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[__ADDR_ADDR_I]], align 8
257245
// CHECK-CXX-NEXT: [[TMP2:%.*]] = load i64, ptr [[AGG_TMP]], align 8
258246
// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i64, ptr [[AGG_TMP]], i32 1

clang/test/CodeGen/atomic-arm64.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,7 @@ void test3(pointer_pair_t pair) {
5959
}
6060

6161
// CHECK-LABEL:define{{.*}} void @test4(
62-
// CHECK-SAME: ptr noundef [[QUAD:%.*]])
63-
// CHECK: [[QUAD_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
64-
// CHECK-NEXT: [[TEMP:%.*]] = alloca [[QUAD_T:%.*]], align 8
65-
// CHECK-NEXT: store ptr [[QUAD]], ptr [[QUAD_INDIRECT_ADDR]]
62+
// CHECK: [[TEMP:%.*]] = alloca [[QUAD_T:%.*]], align 8
6663
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TEMP]], ptr align 8 {{%.*}}, i64 32, i1 false)
6764
// CHECK-NEXT: call void @__atomic_store(i64 noundef 32, ptr noundef @a_pointer_quad, ptr noundef [[TEMP]], i32 noundef 5)
6865
void test4(pointer_quad_t quad) {

clang/test/CodeGenCXX/amdgcn-func-arg.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,9 @@ void func_with_ref_arg(A &a);
1919
void func_with_ref_arg(B &b);
2020

2121
// CHECK-LABEL: @_Z22func_with_indirect_arg1A(
22-
// CHECK-SAME: ptr addrspace(5) noundef [[ARG:%.*]])
2322
// CHECK-NEXT: entry:
24-
// CHECK-NEXT: [[INDIRECT_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
2523
// CHECK-NEXT: [[P:%.*]] = alloca ptr, align 8, addrspace(5)
26-
// CHECK-NEXT: [[INDIRECT_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[INDIRECT_ADDR]] to ptr
2724
// CHECK-NEXT: [[P_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[P]] to ptr
28-
// CHECK-NEXT: store ptr addrspace(5) [[ARG]], ptr [[INDIRECT_ADDR_ASCAST]]
2925
// CHECK-NEXT: [[A_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[A:%.*]] to ptr
3026
// CHECK-NEXT: store ptr [[A_ASCAST]], ptr [[P_ASCAST]], align 8
3127
// CHECK-NEXT: ret void

clang/test/CodeGenCXX/debug-info.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44
// CHECK: @_ZN6pr96081xE ={{.*}} global ptr null, align 8, !dbg [[X:![0-9]+]]
55

66
// CHECK: define{{.*}} void @_ZN7pr147634funcENS_3fooE
7-
// CHECK-SAME: ptr noundef [[param:%.*]])
8-
// CHECK-NEXT: entry:
9-
// CHECK-NEXT: alloca ptr, align 8
10-
// CHECK-NEXT: [[param_addr_storage:%.*]] = alloca ptr, align 8
11-
// CHECK-NEXT: store
12-
// CHECK-NEXT: store ptr [[param]], ptr [[param_addr_storage]], align 8
13-
// CHECK-NEXT: call void @llvm.dbg.declare(metadata ptr [[param_addr_storage]], metadata ![[F:[0-9]+]], metadata !DIExpression(DW_OP_deref))
7+
// CHECK: call void @llvm.dbg.declare({{.*}}, metadata ![[F:[0-9]+]], metadata !DIExpression())
148

159
// !llvm.dbg.cu pulls in globals and their types first.
1610
// CHECK-NOT: !DIGlobalVariable(name: "c"

clang/test/CodeGenCXX/derived-to-base-conv.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@ void test0_helper(A);
3232
void test0(X x) {
3333
test0_helper(x);
3434
// CHECK-LABEL: define{{.*}} void @_Z5test01X(
35-
// CHECK-SAME: ptr noundef [[ARG:%.*]])
36-
// CHECK: [[ARG_ADDR:%.*]] = alloca ptr
37-
// CHECK-NEXT: [[TMP:%.*]] = alloca [[A:%.*]], align
38-
// CHECK-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]]
35+
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align
3936
// CHECK-NEXT: [[T0:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN1XcvR1BEv(
4037
// CHECK-NEXT: call void @_ZN1AC1ERKS_(ptr {{[^,]*}} [[TMP]], ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[T0]])
4138
// CHECK-NEXT: call void @_Z12test0_helper1A(ptr noundef [[TMP]])

clang/test/CodeGenCoroutines/coro-params-exp-namespace.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ void consume(int, int, int) noexcept;
6464
// TODO: Add support for CopyOnly params
6565
// CHECK: define{{.*}} void @_Z1fi8MoveOnly11MoveAndCopy(i32 noundef %val, %struct.MoveOnly* noundef %[[MoParam:.+]], %struct.MoveAndCopy* noundef %[[McParam:.+]]) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*
6666
void f(int val, MoveOnly moParam, MoveAndCopy mcParam) {
67-
// CHECK: %[[MoCopy:.+]] = alloca %struct.MoveOnly,
68-
// CHECK: %[[McCopy:.+]] = alloca %struct.MoveAndCopy,
67+
// CHECK: %[[MoCopy:.+]] = alloca %struct.MoveOnly
68+
// CHECK: %[[McCopy:.+]] = alloca %struct.MoveAndCopy
6969
// CHECK: store i32 %val, i32* %[[ValAddr:.+]]
7070

7171
// CHECK: call i8* @llvm.coro.begin(
@@ -110,7 +110,7 @@ void f(int val, MoveOnly moParam, MoveAndCopy mcParam) {
110110
// CHECK-LABEL: void @_Z16dependent_paramsI1A1BEvT_T0_S3_(%struct.A* noundef %x, %struct.B* noundef %0, %struct.B* noundef %y)
111111
template <typename T, typename U>
112112
void dependent_params(T x, U, U y) {
113-
// CHECK: %[[x_copy:.+]] = alloca %struct.A,
113+
// CHECK: %[[x_copy:.+]] = alloca %struct.A
114114
// CHECK-NEXT: %[[unnamed_copy:.+]] = alloca %struct.B
115115
// CHECK-NEXT: %[[y_copy:.+]] = alloca %struct.B
116116

clang/test/CodeGenCoroutines/coro-params.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ void consume(int,int,int) noexcept;
6464
// TODO: Add support for CopyOnly params
6565
// CHECK: define{{.*}} void @_Z1fi8MoveOnly11MoveAndCopy(i32 noundef %val, %struct.MoveOnly* noundef %[[MoParam:.+]], %struct.MoveAndCopy* noundef %[[McParam:.+]]) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*
6666
void f(int val, MoveOnly moParam, MoveAndCopy mcParam) {
67-
// CHECK: %[[MoCopy:.+]] = alloca %struct.MoveOnly,
68-
// CHECK: %[[McCopy:.+]] = alloca %struct.MoveAndCopy,
67+
// CHECK: %[[MoCopy:.+]] = alloca %struct.MoveOnly
68+
// CHECK: %[[McCopy:.+]] = alloca %struct.MoveAndCopy
6969
// CHECK: store i32 %val, i32* %[[ValAddr:.+]]
7070

7171
// CHECK: call i8* @llvm.coro.begin(
@@ -110,7 +110,7 @@ void f(int val, MoveOnly moParam, MoveAndCopy mcParam) {
110110
// CHECK-LABEL: void @_Z16dependent_paramsI1A1BEvT_T0_S3_(%struct.A* noundef %x, %struct.B* noundef %0, %struct.B* noundef %y)
111111
template <typename T, typename U>
112112
void dependent_params(T x, U, U y) {
113-
// CHECK: %[[x_copy:.+]] = alloca %struct.A,
113+
// CHECK: %[[x_copy:.+]] = alloca %struct.A
114114
// CHECK-NEXT: %[[unnamed_copy:.+]] = alloca %struct.B
115115
// CHECK-NEXT: %[[y_copy:.+]] = alloca %struct.B
116116

clang/test/OpenMP/for_firstprivate_codegen.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -391,10 +391,8 @@ int main() {
391391
// CHECK1-NEXT: entry:
392392
// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
393393
// CHECK1-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
394-
// CHECK1-NEXT: [[T_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
395394
// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
396395
// CHECK1-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8
397-
// CHECK1-NEXT: store ptr [[T]], ptr [[T_INDIRECT_ADDR]], align 8
398396
// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
399397
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
400398
// CHECK1-NEXT: call void @_ZN1SIfEC2ERKS0_2St(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef [[T]])
@@ -464,10 +462,8 @@ int main() {
464462
// CHECK1-NEXT: entry:
465463
// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
466464
// CHECK1-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
467-
// CHECK1-NEXT: [[T_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
468465
// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
469466
// CHECK1-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8
470-
// CHECK1-NEXT: store ptr [[T]], ptr [[T_INDIRECT_ADDR]], align 8
471467
// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
472468
// CHECK1-NEXT: [[F:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0
473469
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
@@ -653,10 +649,8 @@ int main() {
653649
// CHECK1-NEXT: entry:
654650
// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
655651
// CHECK1-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
656-
// CHECK1-NEXT: [[T_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
657652
// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
658653
// CHECK1-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8
659-
// CHECK1-NEXT: store ptr [[T]], ptr [[T_INDIRECT_ADDR]], align 8
660654
// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
661655
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
662656
// CHECK1-NEXT: call void @_ZN1SIiEC2ERKS0_2St(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef [[T]])
@@ -706,10 +700,8 @@ int main() {
706700
// CHECK1-NEXT: entry:
707701
// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
708702
// CHECK1-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
709-
// CHECK1-NEXT: [[T_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
710703
// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
711704
// CHECK1-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8
712-
// CHECK1-NEXT: store ptr [[T]], ptr [[T_INDIRECT_ADDR]], align 8
713705
// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
714706
// CHECK1-NEXT: [[F:%.*]] = getelementptr inbounds [[STRUCT_S_0:%.*]], ptr [[THIS1]], i32 0, i32 0
715707
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8

0 commit comments

Comments
 (0)