Implement Transforms/InstCombine/vec_extract_elt.ll, transforming:
authorChris Lattner <sabre@nondot.org>
Sat, 14 Apr 2007 23:02:14 +0000 (23:02 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 14 Apr 2007 23:02:14 +0000 (23:02 +0000)
commitb7300fa8d25be539879af8844dcc3b4bc0c58dce
treed58c1d81ed8fabb4d50e34933786764da82744a8
parent32b4c12e6b6f172623a1c507f72523469ee6c23d
Implement Transforms/InstCombine/vec_extract_elt.ll, transforming:

define i32 @test(float %f) {
        %tmp7 = insertelement <4 x float> undef, float %f, i32 0
        %tmp17 = bitcast <4 x float> %tmp7 to <4 x i32>
        %tmp19 = extractelement <4 x i32> %tmp17, i32 0
        ret i32 %tmp19
}

into:

define i32 @test(float %f) {
        %tmp19 = bitcast float %f to i32                ; <i32> [#uses=1]
        ret i32 %tmp19
}

On PPC, this is the difference between:

_test:
        mfspr r2, 256
        oris r3, r2, 8192
        mtspr 256, r3
        stfs f1, -16(r1)
        addi r3, r1, -16
        addi r4, r1, -32
        lvx v2, 0, r3
        stvx v2, 0, r4
        lwz r3, -32(r1)
        mtspr 256, r2
        blr

and:

_test:
        stfs f1, -4(r1)
        nop
        nop
        nop
        lwz r3, -4(r1)
        blr

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