Change instcombine to use FoldPHIArgGEPIntoPHI to fold two operand PHIs
authorChris Lattner <sabre@nondot.org>
Mon, 1 Dec 2008 03:42:51 +0000 (03:42 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Dec 2008 03:42:51 +0000 (03:42 +0000)
commit38b3dcc4651606c683d864f11cd27852810f3936
tree9686bda533eff6e04796581b1d33a8fed1a3dc5a
parent05f18920e11f9427201ff3f023d11a8863deac37
Change instcombine to use FoldPHIArgGEPIntoPHI to fold two operand PHIs
instead of using FoldPHIArgBinOpIntoPHI.  In addition to being more
obvious, this also fixes a problem where instcombine wouldn't merge two
phis that had different variable indices.  This prevented instcombine
from factoring big chunks of code in 403.gcc.  For example:

 insn_cuid.exit:
-       %tmp336 = load i32** @uid_cuid, align 4
-       %tmp337 = getelementptr %struct.rtx_def* %insn_addr.0.ph.i, i32 0, i32 3
-       %tmp338 = bitcast [1 x %struct.rtunion]* %tmp337 to i32*
-       %tmp339 = load i32* %tmp338, align 4
-       %tmp340 = getelementptr i32* %tmp336, i32 %tmp339
        br label %bb62

 bb61:
-       %tmp341 = load i32** @uid_cuid, align 4
-       %tmp342 = getelementptr %struct.rtx_def* %insn, i32 0, i32 3
-       %tmp343 = bitcast [1 x %struct.rtunion]* %tmp342 to i32*
-       %tmp344 = load i32* %tmp343, align 4
-       %tmp345 = getelementptr i32* %tmp341, i32 %tmp344
        br label %bb62

 bb62:
-       %iftmp.62.0.in = phi i32* [ %tmp345, %bb61 ], [ %tmp340, %insn_cuid.exit ]
+       %insn.pn2 = phi %struct.rtx_def* [ %insn, %bb61 ], [ %insn_addr.0.ph.i, %insn_cuid.exit ]
+       %tmp344.pn.in.in = getelementptr %struct.rtx_def* %insn.pn2, i32 0, i32 3
+       %tmp344.pn.in = bitcast [1 x %struct.rtunion]* %tmp344.pn.in.in to i32*
+       %tmp341.pn = load i32** @uid_cuid
+       %tmp344.pn = load i32* %tmp344.pn.in
+       %iftmp.62.0.in = getelementptr i32* %tmp341.pn, i32 %tmp344.pn
        %iftmp.62.0 = load i32* %iftmp.62.0.in

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60325 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/InstructionCombining.cpp