[PATCH] D11360: Proposed patch to prevent the creation of empty (forwarding) blocks resulting from nested ifs.
Wolfgang Pieb via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 27 11:36:03 PDT 2016
wolfgangp updated this revision to Diff 61987.
wolfgangp added a comment.
Herald added a subscriber: mehdi_amini.
Updating this patch against a recent revision.
http://reviews.llvm.org/D11360
Files:
lib/CodeGen/CGStmt.cpp
test/CodeGen/forwarding-blocks-if.c
Index: test/CodeGen/forwarding-blocks-if.c
===================================================================
--- test/CodeGen/forwarding-blocks-if.c
+++ test/CodeGen/forwarding-blocks-if.c
@@ -0,0 +1,43 @@
+// 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
Index: lib/CodeGen/CGStmt.cpp
===================================================================
--- lib/CodeGen/CGStmt.cpp
+++ lib/CodeGen/CGStmt.cpp
@@ -606,7 +606,12 @@
RunCleanupsScope ThenScope(*this);
EmitStmt(S.getThen());
}
- EmitBranch(ContBlock);
+ {
+ auto CurBlock = Builder.GetInsertBlock();
+ EmitBranch(ContBlock);
+ if (CurBlock)
+ SimplifyForwardingBlocks(CurBlock);
+ }
// Emit the 'else' code if present.
if (const Stmt *Else = S.getElse()) {
@@ -622,7 +627,10 @@
{
// There is no need to emit line number for an unconditional branch.
auto NL = ApplyDebugLocation::CreateEmpty(*this);
+ auto CurBlock = Builder.GetInsertBlock();
EmitBranch(ContBlock);
+ if (CurBlock)
+ SimplifyForwardingBlocks(CurBlock);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11360.61987.patch
Type: text/x-patch
Size: 1836 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160627/85b4b210/attachment.bin>
More information about the cfe-commits
mailing list