[LLVMbugs] [Bug 3720] New: Scalar replacement introduces store with incorrect alignment
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Wed Mar 4 07:28:19 PST 2009
http://llvm.org/bugs/show_bug.cgi?id=3720
Summary: Scalar replacement introduces store with incorrect
alignment
Product: libraries
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Scalar Optimizations
AssignedTo: unassignedbugs at nondot.org
ReportedBy: richard at xmos.com
CC: llvmbugs at cs.uiuc.edu
When the scalar replacement pass replaces a structure which is the source of a
llvm.memcpy then it replaces the memcpy with stores. It does not seem to be
taking into account the alignment of the memcpy when setting the alignment of
these stores.
running opt -scalar-repl on the following:
%struct.st = type <{ i16 }>
define void @f(i8* %p) nounwind {
entry:
%s = alloca %struct.st, align 4 ; <%struct.st*> [#uses=2]
%0 = getelementptr %struct.st* %s, i32 0, i32 0 ; <i16*> [#uses=1]
store i16 1, i16* %0, align 4
%s1 = bitcast %struct.st* %s to i8* ; <i8*> [#uses=1]
call void @llvm.memcpy.i32(i8* %p, i8* %s1, i32 2, i32 1)
ret void
}
declare void @llvm.memcpy.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
Results in the following output:
%struct.st = type <{ i16 }>
define void @f(i8* %p) nounwind {
entry:
%p1 = bitcast i8* %p to %struct.st* ; <%struct.st*> [#uses=1]
%p1.0 = getelementptr %struct.st* %p1, i32 0, i32 0 ; <i16*> [#uses=1]
store i16 1, i16* %p1.0
ret void
}
declare void @llvm.memcpy.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
This is invalid - if %p isn't 16bit aligned then the store will be misaligned
and this may trap depending on the target.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list