[llvm-bugs] [Bug 31990] New: Wrong-code rewrite of memcpy in instcombine
via llvm-bugs
llvm-bugs at lists.llvm.org
Fri Feb 17 05:12:26 PST 2017
https://bugs.llvm.org/show_bug.cgi?id=31990
Bug ID: 31990
Summary: Wrong-code rewrite of memcpy in instcombine
Product: new-bugs
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: new bugs
Assignee: unassignedbugs at nondot.org
Reporter: mikael.holmen at ericsson.com
CC: llvm-bugs at lists.llvm.org
Created attachment 18000
--> https://bugs.llvm.org/attachment.cgi?id=18000&action=edit
reproducer
Running opt:
opt -S -instcombine -o - tr13025.ll
on this little program:
@g = constant i8 -1
define void @foo() {
entry:
%0 = alloca i8
%1 = bitcast i8* %0 to i4*
call void @bar(i4* %1)
%2 = bitcast i4* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %2, i8* @g, i32 1, i32 1, i1 false)
call void @gaz(i8* %2)
ret void
}
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly,
i8* nocapture readonly, i32, i32, i1)
declare void @bar(i4*)
declare void @gaz(i8*)
gives:
define void @foo() {
entry:
%0 = alloca i4, align 1
call void @bar(i4* nonnull %0)
%1 = bitcast i4* %0 to i8*
store i4 -1, i4* %0, align 1
call void @gaz(i8* %1)
ret void
}
So a memcpy of one word has been replaced by a store of an i4:
store i4 -1, i4* %0, align 1
This doesn't seem right to me.
Also:
%0 = alloca i8
has been replaced with
%0 = alloca i4, align 1
since i4 and i8 have the same store sizes, but I'm not sure if that is a
problem
or not.
The memcpy change is done by InstCombiner::SimplifyMemTransfer, especially
this code is involved:
if (SrcETy->isSized() && DL.getTypeStoreSize(SrcETy) == Size) {
// The SrcETy might be something like {{{double}}} or [1 x double]. Rip
// down through these levels if so.
SrcETy = reduceToSingleValueType(SrcETy);
Since i4 has store size 1, we pass the above check and then conclude that it's
ok to just do a store i4 -1 instead of store i8 -1.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170217/5a9a0e7d/attachment.html>
More information about the llvm-bugs
mailing list