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/Feature/cfgstructures.ll b/test/Feature/cfgstructures.ll
new file mode 100644
index 0000000..b16af47
--- /dev/null
+++ b/test/Feature/cfgstructures.ll
@@ -0,0 +1,57 @@
+; RUN: llvm-upgrade < %s | llvm-as | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+implementation
+
+;; This is an irreducible flow graph
+
+
+void "irreducible"(bool %cond)
+begin
+	br bool %cond, label %X, label %Y
+
+X:
+	br label %Y
+Y:
+	br label %X
+end
+
+;; This is a pair of loops that share the same header
+
+void "sharedheader"(bool %cond)
+begin
+	br label %A
+A:
+	br bool %cond, label %X, label %Y
+
+X:
+	br label %A
+Y:
+	br label %A
+end
+
+;; This is a simple nested loop
+void "nested"(bool %cond1, bool %cond2, bool %cond3)
+begin
+	br label %Loop1
+
+Loop1:
+	br label %Loop2
+
+Loop2:
+	br label %Loop3
+
+Loop3:
+	br bool %cond3, label %Loop3, label %L3Exit
+
+L3Exit:
+	br bool %cond2, label %Loop2, label %L2Exit
+
+L2Exit:
+	br bool %cond1, label %Loop1, label %L1Exit
+
+L1Exit:
+	ret void
+end
+