[PATCH] [Thumb1] Re-write emitThumbRegPlusImmediate
Oliver Stannard
oliver.stannard at arm.com
Tue Nov 11 02:02:04 PST 2014
Hi t.p.northover,
This was motivated by a bug which caused code like this to be
miscompiled:
declare void @take_ptr(i8*)
define void @test() {
%addr1.32 = alloca i8
%addr2.32 = alloca i32, i32 1028
call void @take_ptr(i8* %addr1)
ret void
}
This was emitting the following assembly to get the value of %addr1:
add r0, sp, #1020
add r0, r0, #8
However, "add r0, r0, #8" is not a valid Thumb1 instruction, and this
could not be assembled. The generated object file contained this,
resulting in r0 holding SP+8 rather tha SP+1028:
add r0, sp, #1020
add r0, sp, #8
This function looked like it could have caused miscompilations for
other combinations of registers and offsets (though I don't think it is
currently called with these), and the heuristic it used did not match
the emitted code in all cases.
http://reviews.llvm.org/D6211
Files:
lib/Target/ARM/Thumb1RegisterInfo.cpp
test/CodeGen/ARM/thumb1-varalloc.ll
test/CodeGen/Thumb/large-stack.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6211.16031.patch
Type: text/x-patch
Size: 16549 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141111/e55419b5/attachment.bin>
More information about the llvm-commits
mailing list