summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2011-07-06 19:19:55 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2011-07-06 19:19:55 +0000
commit4a5d9a9c20e03faeea4c8cf72955893844dbcfab (patch)
tree486c2e72f329fa52a40105eabad6396b38e9424d /llvm/test/Transforms
parentd4deaf2677a49819c810e7857111961531050804 (diff)
downloadbcm5719-llvm-4a5d9a9c20e03faeea4c8cf72955893844dbcfab.tar.gz
bcm5719-llvm-4a5d9a9c20e03faeea4c8cf72955893844dbcfab.zip
LICM: Do not loose alignment on promotion
The promotion code lost any alignment information, when hoisting loads and stores out of the loop. This lead to incorrect aligned memory accesses. We now use the largest alignment we can prove to be correct. llvm-svn: 134520
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/LICM/2011-07-06-Alignment.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll b/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
new file mode 100644
index 00000000000..f97b7010bc0
--- /dev/null
+++ b/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
@@ -0,0 +1,26 @@
+; RUN: opt -licm -S %s | FileCheck %s
+
+@A = common global [1024 x float] zeroinitializer, align 4
+
+define i32 @main() nounwind {
+entry:
+ br label %for.cond
+
+for.cond:
+ %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
+ %arrayidx = getelementptr [1024 x float]* @A, i64 0, i64 3
+ %vecidx = bitcast float* %arrayidx to <4 x float>*
+ store <4 x float> zeroinitializer, <4 x float>* %vecidx, align 4
+ %indvar.next = add i64 %indvar, 1
+ %exitcond = icmp ne i64 %indvar, 1024
+ br i1 %exitcond, label %for.body, label %for.end
+
+for.body:
+ br label %for.cond
+
+for.end:
+ ret i32 0
+}
+
+;CHECK: store <4 x float> {{.*}} align 4
+
OpenPOWER on IntegriCloud