r276361 - Reverting r275115 which caused PR28634.

Mehdi Amini via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 21 17:31:19 PDT 2016


> On Jul 21, 2016, at 4:28 PM, Wolfgang Pieb via cfe-commits <cfe-commits at lists.llvm.org> wrote:
> 
> Author: wolfgangp
> Date: Thu Jul 21 18:28:18 2016
> New Revision: 276361
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=276361&view=rev
> Log:
> Reverting r275115 which caused PR28634.
> When empty (forwarding) basic blocks that are referenced by user labels
> are removed, incorrect code may be generated.

Can you add a non-regression test case?
(It seems the test-suite didn’t catch this bug right?)

Thanks,

— 
Mehdi


> 
> 
> Removed:
>    cfe/trunk/test/CodeGen/forwarding-blocks-if.c
> Modified:
>    cfe/trunk/lib/CodeGen/CGStmt.cpp
> 
> Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=276361&r1=276360&r2=276361&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Thu Jul 21 18:28:18 2016
> @@ -623,14 +623,7 @@ void CodeGenFunction::EmitIfStmt(const I
>     RunCleanupsScope ThenScope(*this);
>     EmitStmt(S.getThen());
>   }
> -  {
> -    auto CurBlock = Builder.GetInsertBlock();
> -    EmitBranch(ContBlock);
> -    // Eliminate any empty blocks that may have been created by nested
> -    // control flow statements in the 'then' clause.
> -    if (CurBlock)
> -      SimplifyForwardingBlocks(CurBlock); 
> -  }
> +  EmitBranch(ContBlock);
> 
>   // Emit the 'else' code if present.
>   if (const Stmt *Else = S.getElse()) {
> @@ -646,12 +639,7 @@ void CodeGenFunction::EmitIfStmt(const I
>     {
>       // There is no need to emit line number for an unconditional branch.
>       auto NL = ApplyDebugLocation::CreateEmpty(*this);
> -      auto CurBlock = Builder.GetInsertBlock();
>       EmitBranch(ContBlock);
> -      // Eliminate any empty blocks that may have been created by nested
> -      // control flow statements emitted in the 'else' clause.
> -      if (CurBlock)
> -        SimplifyForwardingBlocks(CurBlock); 
>     }
>   }
> 
> 
> Removed: cfe/trunk/test/CodeGen/forwarding-blocks-if.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/forwarding-blocks-if.c?rev=276360&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/forwarding-blocks-if.c (original)
> +++ cfe/trunk/test/CodeGen/forwarding-blocks-if.c (removed)
> @@ -1,36 +0,0 @@
> -// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
> -// Check that no empty blocks are generated for nested ifs.
> -
> -extern void func();
> -
> -int f0(int val) {
> -  if (val == 0) {
> -    func();
> -  } else if (val == 1) {
> -    func();
> -  }
> -  return 0;
> -}
> -
> -// CHECK-LABEL: define {{.*}}i32 @f0
> -// CHECK: call void {{.*}} @func
> -// CHECK: call void {{.*}} @func
> -// CHECK: br label %[[RETBLOCK1:[^ ]*]]
> -// CHECK: [[RETBLOCK1]]:
> -// CHECK-NOT: br label
> -// CHECK: ret i32
> -
> -int f1(int val, int g) {
> -  if (val == 0)
> -    if (g == 1) {
> -      func();
> -    }
> -  return 0;
> -}
> -
> -// CHECK-LABEL: define {{.*}}i32 @f1
> -// CHECK: call void {{.*}} @func
> -// CHECK: br label %[[RETBLOCK2:[^ ]*]]
> -// CHECK: [[RETBLOCK2]]:
> -// CHECK-NOT: br label
> -// CHECK: ret i32
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list