r358104 - Don't emit an unreachable return block.
Marco Castelluccio via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 11 15:13:42 PDT 2019
Thanks, your fix looks good to me.
- Marco.
Il 11/04/19 05:05, John McCall ha scritto:
>
>
> On 10 Apr 2019, at 21:50, wolfgang.pieb at sony.com wrote:
>
>> Hi,
>> This commit seems to be causing a test failure on several buildbots
>> (e.g.
>> http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/26305).
>> instrprof-shared-gcov-flush.test is failing because of differences in
>> profile info. The test passes when I revert your change, so perhaps
>> it's just a case of updating the test.
>> Could you please take a look?
>
> Adjusted the test in r358149 as a hopeful fix. CC'ing Marco since I
> believe this was originally his test.
>
> John.
>
>>
>> Thanks,
>> Wolfgang Pieb
>>
>> -----Original Message-----
>> From: cfe-commits <cfe-commits-bounces at lists.llvm.org> On Behalf Of
>> John McCall via cfe-commits
>> Sent: Wednesday, April 10, 2019 10:03 AM
>> To: cfe-commits at lists.llvm.org
>> Subject: r358104 - Don't emit an unreachable return block.
>>
>> Author: rjmccall
>> Date: Wed Apr 10 10:03:09 2019
>> New Revision: 358104
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=358104&view=rev
>> Log:
>> Don't emit an unreachable return block.
>>
>> Patch by Brad Moody.
>>
>> Added:
>> cfe/trunk/test/CodeGen/unreachable-ret.c
>> Modified:
>> cfe/trunk/lib/CodeGen/CGCall.cpp
>> cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>> cfe/trunk/test/OpenMP/parallel_reduction_codegen.cpp
>>
>> Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=358104&r1=358103&r2=358104&view=diff
>> ==============================================================================
>>
>> --- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGCall.cpp Wed Apr 10 10:03:09 2019
>> @@ -2873,15 +2873,6 @@ void CodeGenFunction::EmitFunctionEpilog
>> RV = SI->getValueOperand();
>> SI->eraseFromParent();
>>
>> - // If that was the only use of the return value, nuke it as
>> well now.
>> - auto returnValueInst = ReturnValue.getPointer();
>> - if (returnValueInst->use_empty()) {
>> - if (auto alloca =
>> dyn_cast<llvm::AllocaInst>(returnValueInst)) {
>> - alloca->eraseFromParent();
>> - ReturnValue = Address::invalid();
>> - }
>> - }
>> -
>> // Otherwise, we have to do a simple load.
>> } else {
>> RV = Builder.CreateLoad(ReturnValue);
>>
>> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=358104&r1=358103&r2=358104&view=diff
>> ==============================================================================
>>
>> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Wed Apr 10 10:03:09 2019
>> @@ -255,6 +255,7 @@ llvm::DebugLoc CodeGenFunction::EmitRetu
>> if (CurBB->empty() || ReturnBlock.getBlock()->use_empty()) {
>> ReturnBlock.getBlock()->replaceAllUsesWith(CurBB);
>> delete ReturnBlock.getBlock();
>> + ReturnBlock = JumpDest();
>> } else
>> EmitBlock(ReturnBlock.getBlock());
>> return llvm::DebugLoc();
>> @@ -274,6 +275,7 @@ llvm::DebugLoc CodeGenFunction::EmitRetu
>> Builder.SetInsertPoint(BI->getParent());
>> BI->eraseFromParent();
>> delete ReturnBlock.getBlock();
>> + ReturnBlock = JumpDest();
>> return Loc;
>> }
>> }
>> @@ -448,6 +450,19 @@ void CodeGenFunction::FinishFunction(Sou
>> // 5. Width of vector aguments and return types for functions
>> called by this
>> // function.
>> CurFn->addFnAttr("min-legal-vector-width",
>> llvm::utostr(LargestVectorWidth));
>> +
>> + // If we generated an unreachable return block, delete it now.
>> + if (ReturnBlock.isValid() && ReturnBlock.getBlock()->use_empty()) {
>> + Builder.ClearInsertionPoint();
>> + ReturnBlock.getBlock()->eraseFromParent();
>> + }
>> + if (ReturnValue.isValid()) {
>> + auto *RetAlloca =
>> dyn_cast<llvm::AllocaInst>(ReturnValue.getPointer());
>> + if (RetAlloca && RetAlloca->use_empty()) {
>> + RetAlloca->eraseFromParent();
>> + ReturnValue = Address::invalid();
>> + }
>> + }
>> }
>>
>> /// ShouldInstrumentFunction - Return true if the current function
>> should be
>>
>> Added: cfe/trunk/test/CodeGen/unreachable-ret.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/unreachable-ret.c?rev=358104&view=auto
>> ==============================================================================
>>
>> --- cfe/trunk/test/CodeGen/unreachable-ret.c (added)
>> +++ cfe/trunk/test/CodeGen/unreachable-ret.c Wed Apr 10 10:03:09 2019
>> @@ -0,0 +1,23 @@
>> +// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
>> +
>> +extern void abort() __attribute__((noreturn));
>> +
>> +void f1() {
>> + abort();
>> +}
>> +// CHECK-LABEL: define void @f1()
>> +// CHECK-NEXT: entry:
>> +// CHECK-NEXT: call void @abort()
>> +// CHECK-NEXT: unreachable
>> +// CHECK-NEXT: }
>> +
>> +void *f2() {
>> + abort();
>> + return 0;
>> +}
>> +// CHECK-LABEL: define i8* @f2()
>> +// CHECK-NEXT: entry:
>> +// CHECK-NEXT: call void @abort()
>> +// CHECK-NEXT: unreachable
>> +// CHECK-NEXT: }
>> +
>>
>> Modified: cfe/trunk/test/OpenMP/parallel_reduction_codegen.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_reduction_codegen.cpp?rev=358104&r1=358103&r2=358104&view=diff
>> ==============================================================================
>>
>> --- cfe/trunk/test/OpenMP/parallel_reduction_codegen.cpp (original)
>> +++ cfe/trunk/test/OpenMP/parallel_reduction_codegen.cpp Wed Apr 10
>> +++ 10:03:09 2019
>> @@ -622,7 +622,7 @@ int main() {
>>
>> // CHECK-NOT: call i32 @__kmpc_reduce
>>
>> -// CHECK: ret void
>> +// CHECK: }
>>
>> // CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]() // CHECK:
>> [[TEST:%.+]] = alloca [[S_INT_TY]],
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list