mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 22:23:10 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134520 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
26
test/Transforms/LICM/2011-07-06-Alignment.ll
Normal file
26
test/Transforms/LICM/2011-07-06-Alignment.ll
Normal file
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user