nick created this revision. nick added reviewers: akhuang, rnk, aprantl. nick requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When no debug information is emitted there is no point in emitting a hack introduced in D63361 <https://reviews.llvm.org/D63361>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D99107 Files: clang/lib/CodeGen/CodeGenFunction.cpp clang/test/CodeGen/arm64-microsoft-arguments.cpp Index: clang/test/CodeGen/arm64-microsoft-arguments.cpp =================================================================== --- clang/test/CodeGen/arm64-microsoft-arguments.cpp +++ clang/test/CodeGen/arm64-microsoft-arguments.cpp @@ -43,7 +43,7 @@ // Pass and return aggregate (of size < 16 bytes) with non-trivial destructor. // Passed directly but returned indirectly. // CHECK: define {{.*}} void {{.*}}f4{{.*}}(%struct.S4* inreg noalias sret(%struct.S4) align 4 %agg.result) -// CHECK: call void {{.*}}func4{{.*}}(%struct.S4* inreg sret(%struct.S4) align 4 %agg.result, [2 x i64] %5) +// CHECK: call void {{.*}}func4{{.*}}(%struct.S4* inreg sret(%struct.S4) align 4 %agg.result, [2 x i64] %4) struct S4 { int a[3]; ~S4(); @@ -57,7 +57,7 @@ // Pass and return from instance method called from instance method. // CHECK: define {{.*}} void @{{.*}}bar@Q1{{.*}}(%class.Q1* {{[^,]*}} %this, %class.P1* inreg noalias sret(%class.P1) align 1 %agg.result) -// CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* {{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %1) +// CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* {{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %0) class P1 { public: Index: clang/lib/CodeGen/CodeGenFunction.cpp =================================================================== --- clang/lib/CodeGen/CodeGenFunction.cpp +++ clang/lib/CodeGen/CodeGenFunction.cpp @@ -1055,7 +1055,8 @@ if (CurFnInfo->getReturnInfo().isSRetAfterThis()) ++AI; ReturnValue = Address(&*AI, CurFnInfo->getReturnInfo().getIndirectAlign()); - if (!CurFnInfo->getReturnInfo().getIndirectByVal()) { + if (getDebugInfo() && CGM.getCodeGenOpts().hasReducedDebugInfo() && + !CurFnInfo->getReturnInfo().getIndirectByVal()) { ReturnValuePointer = CreateDefaultAlignTempAlloca(Int8PtrTy, "result.ptr"); Builder.CreateStore(Builder.CreatePointerBitCastOrAddrSpaceCast(
Index: clang/test/CodeGen/arm64-microsoft-arguments.cpp =================================================================== --- clang/test/CodeGen/arm64-microsoft-arguments.cpp +++ clang/test/CodeGen/arm64-microsoft-arguments.cpp @@ -43,7 +43,7 @@ // Pass and return aggregate (of size < 16 bytes) with non-trivial destructor. // Passed directly but returned indirectly. // CHECK: define {{.*}} void {{.*}}f4{{.*}}(%struct.S4* inreg noalias sret(%struct.S4) align 4 %agg.result) -// CHECK: call void {{.*}}func4{{.*}}(%struct.S4* inreg sret(%struct.S4) align 4 %agg.result, [2 x i64] %5) +// CHECK: call void {{.*}}func4{{.*}}(%struct.S4* inreg sret(%struct.S4) align 4 %agg.result, [2 x i64] %4) struct S4 { int a[3]; ~S4(); @@ -57,7 +57,7 @@ // Pass and return from instance method called from instance method. // CHECK: define {{.*}} void @{{.*}}bar@Q1{{.*}}(%class.Q1* {{[^,]*}} %this, %class.P1* inreg noalias sret(%class.P1) align 1 %agg.result) -// CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* {{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %1) +// CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* {{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %0) class P1 { public: Index: clang/lib/CodeGen/CodeGenFunction.cpp =================================================================== --- clang/lib/CodeGen/CodeGenFunction.cpp +++ clang/lib/CodeGen/CodeGenFunction.cpp @@ -1055,7 +1055,8 @@ if (CurFnInfo->getReturnInfo().isSRetAfterThis()) ++AI; ReturnValue = Address(&*AI, CurFnInfo->getReturnInfo().getIndirectAlign()); - if (!CurFnInfo->getReturnInfo().getIndirectByVal()) { + if (getDebugInfo() && CGM.getCodeGenOpts().hasReducedDebugInfo() && + !CurFnInfo->getReturnInfo().getIndirectByVal()) { ReturnValuePointer = CreateDefaultAlignTempAlloca(Int8PtrTy, "result.ptr"); Builder.CreateStore(Builder.CreatePointerBitCastOrAddrSpaceCast(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits