[LLVMbugs] [Bug 3923] New: Undef store doesn't clobber earlier stores: overaggressive instcombine
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Wed Apr 1 13:39:00 PDT 2009
http://llvm.org/bugs/show_bug.cgi?id=3923
Summary: Undef store doesn't clobber earlier stores:
overaggressive instcombine
Product: libraries
Version: 2.5
Platform: PC
OS/Version: All
Status: NEW
Severity: minor
Priority: P2
Component: Scalar Optimizations
AssignedTo: unassignedbugs at nondot.org
ReportedBy: jyasskin at google.com
CC: llvmbugs at cs.uiuc.edu, nlewycky at google.com
In some admittedly naive stack-based code, I'm trying to store undef into
popped stack locations so that LLVM will optimize away unneeded stores.
However, the instcombine pass seems to eliminate undef stores before other
passes can use them.
Here's the original code:
$ llvm-dis <~/tmp/dead_store.bc
; ModuleID = '<stdin>'
declare i32 @rand()
define i32 @foo(i32* %stack) {
entry:
%0 = call i32 @rand() ; <i32> [#uses=1]
store i32 %0, i32* %stack
%1 = load i32* %stack ; <i32> [#uses=1]
store i32 undef, i32* %stack
ret i32 %1
}
GVN + DSE does the right thing:
$ opt -gvn -dse ~/tmp/dead_store.bc |llvm-dis
; ModuleID = '<stdin>'
declare i32 @rand()
define i32 @foo(i32* %stack) {
entry:
%0 = call i32 @rand() ; <i32> [#uses=1]
store i32 undef, i32* %stack
ret i32 %0
}
But instcombine alone just removes the "store i32 undef...", which means no
subsequent pass can optimize away the store I was trying to clobber.
$ opt -instcombine ~/tmp/dead_store.bc |llvm-dis
; ModuleID = '<stdin>'
declare i32 @rand()
define i32 @foo(i32* %stack) {
entry:
%0 = call i32 @rand() ; <i32> [#uses=2]
store i32 %0, i32* %stack
ret i32 %0
}
This causes -O3 and -std-compile-opts to fail to optimize the code too:
$ opt -O3 ~/tmp/dead_store.bc |llvm-dis
; ModuleID = '<stdin>'
declare i32 @rand()
define i32 @foo(i32* %stack) {
entry:
%0 = tail call i32 @rand() ; <i32> [#uses=2]
store i32 %0, i32* %stack
ret i32 %0
}
--
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