It's not necessary to do rounding for alloca operations when the requested
alignment is equal to the stack alignment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Transforms/SimplifyCFG/branch-phi-thread.ll b/test/Transforms/SimplifyCFG/branch-phi-thread.ll
new file mode 100644
index 0000000..e370978
--- /dev/null
+++ b/test/Transforms/SimplifyCFG/branch-phi-thread.ll
@@ -0,0 +1,65 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -adce | llvm-dis | \
+; RUN:   not grep {call void %f1}
+; END.
+
+declare void %f1()
+declare void %f2()
+declare void %f3()
+declare void %f4()
+
+implementation
+
+int %test1(int %X, bool %D) {
+E:
+	%C = seteq int %X, 0
+	br bool %C, label %T, label %F
+T:
+	br bool %C, label %B, label %A
+A:
+	call void %f1()
+	br bool %D, label %T, label %F
+B:
+	call void %f2()
+	ret int 345
+F:
+	call void %f3()
+	ret int 123
+}
+
+int %test2(int %X, bool %D) {
+E:
+	%C = seteq int %X, 0
+	br bool %C, label %T, label %F
+T:
+	%P = phi bool [true, %E], [%C, %A]
+	br bool %P, label %B, label %A
+A:
+	call void %f1()
+	br bool %D, label %T, label %F
+B:
+	call void %f2()
+	ret int 345
+F:
+	call void %f3()
+	ret int 123
+}
+
+int %test3(int %X, bool %D, int* %AP, int* %BP) {
+E:
+	%C = seteq int %X, 0
+	br bool %C, label %T, label %F
+T:
+	call void %f3()  ;; Inst in block.
+	%XX = load int* %AP
+	store int %XX, int* %BP
+	br bool %C, label %B, label %A
+A:
+	call void %f1()
+	br bool %D, label %T, label %F
+B:
+	call void %f2()
+	ret int 345
+F:
+	call void %f3()
+	ret int 123
+}