mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-29 22:50:47 +00:00
00edf39b34
MERGE_VALUES nodes. Replacing the result values with the operands in one MERGE_VALUES node may cause another MERGE_VALUES node be CSE'd with the first one, and bring its uses along, so that the first one isn't dead, as this code expects. Fix this by iterating until the node is really dead. This fixes PR4699. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78619 91177308-0d34-0410-b5e6-96231b3b80d8
25 lines
819 B
LLVM
25 lines
819 B
LLVM
; RUN: llvm-as < %s | llc -march=x86 >/dev/null
|
|
; PR4699
|
|
|
|
; Handle this extractvalue-of-extractvalue case without getting in
|
|
; trouble with CSE in DAGCombine.
|
|
|
|
%cc = type { %crd }
|
|
%cr = type { i32 }
|
|
%crd = type { i64, %cr* }
|
|
%pp = type { %cc }
|
|
|
|
define fastcc void @foo(%pp* nocapture byval %p_arg) {
|
|
entry:
|
|
%tmp2 = getelementptr %pp* %p_arg, i64 0, i32 0 ; <%cc*> [#uses=
|
|
%tmp3 = load %cc* %tmp2 ; <%cc> [#uses=1]
|
|
%tmp34 = extractvalue %cc %tmp3, 0 ; <%crd> [#uses=1]
|
|
%tmp345 = extractvalue %crd %tmp34, 0 ; <i64> [#uses=1]
|
|
%.ptr.i = load %cr** undef ; <%cr*> [#uses=0]
|
|
%tmp15.i = shl i64 %tmp345, 3 ; <i64> [#uses=0]
|
|
store %cr* undef, %cr** undef
|
|
ret void
|
|
}
|
|
|
|
|