| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 ; RUN: opt < %s -instcombine -S | not grep {shufflevector.\*i32 8} |  | 
| 2 |  | 
| 3 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
     2:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" |  | 
| 4 target triple = "i386-apple-darwin9" |  | 
| 5         %struct.ActiveTextureTargets = type { i64, i64, i64, i64, i64, i64 } |  | 
| 6         %struct.AlphaTest = type { float, i16, i8, i8 } |  | 
| 7         %struct.ArrayRange = type { i8, i8, i8, i8 } |  | 
| 8         %struct.BlendMode = type { i16, i16, i16, i16, %struct.IColor4, i16, i16
     , i8, i8, i8, i8 } |  | 
| 9         %struct.ClearColor = type { double, %struct.IColor4, %struct.IColor4, fl
     oat, i32 } |  | 
| 10         %struct.ClipPlane = type { i32, [6 x %struct.IColor4] } |  | 
| 11         %struct.ColorBuffer = type { i16, i8, i8, [8 x i16], [0 x i32] } |  | 
| 12         %struct.ColorMatrix = type { [16 x float]*, %struct.ImagingColorScale } |  | 
| 13         %struct.Convolution = type { %struct.IColor4, %struct.ImagingColorScale,
      i16, i16, [0 x i32], float*, i32, i32 } |  | 
| 14         %struct.DepthTest = type { i16, i16, i8, i8, i8, i8, double, double } |  | 
| 15         %struct.FixedFunction = type { %struct.PPStreamToken* } |  | 
| 16         %struct.FogMode = type { %struct.IColor4, float, float, float, float, fl
     oat, i16, i16, i16, i8, i8 } |  | 
| 17         %struct.HintMode = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i
     16 } |  | 
| 18         %struct.Histogram = type { %struct.ProgramLimits*, i32, i16, i8, i8 } |  | 
| 19         %struct.ImagingColorScale = type { %struct.TCoord2, %struct.TCoord2, %st
     ruct.TCoord2, %struct.TCoord2 } |  | 
| 20         %struct.ImagingSubset = type { %struct.Convolution, %struct.Convolution,
      %struct.Convolution, %struct.ColorMatrix, %struct.Minmax, %struct.Histogram, %s
     truct.ImagingColorScale, %struct.ImagingColorScale, %struct.ImagingColorScale, %
     struct.ImagingColorScale, i32, [0 x i32] } |  | 
| 21         %struct.Light = type { %struct.IColor4, %struct.IColor4, %struct.IColor4
     , %struct.IColor4, %struct.PointLineLimits, float, float, float, float, float, %
     struct.PointLineLimits, float, %struct.PointLineLimits, float, %struct.PointLine
     Limits, float, float, float, float, float } |  | 
| 22         %struct.LightModel = type { %struct.IColor4, [8 x %struct.Light], [2 x %
     struct.Material], i32, i16, i16, i16, i8, i8, i8, i8, i8, i8 } |  | 
| 23         %struct.LightProduct = type { %struct.IColor4, %struct.IColor4, %struct.
     IColor4 } |  | 
| 24         %struct.LineMode = type { float, i32, i16, i16, i8, i8, i8, i8 } |  | 
| 25         %struct.LogicOp = type { i16, i8, i8 } |  | 
| 26         %struct.MaskMode = type { i32, [3 x i32], i8, i8, i8, i8, i8, i8, i8, i8
      } |  | 
| 27         %struct.Material = type { %struct.IColor4, %struct.IColor4, %struct.ICol
     or4, %struct.IColor4, float, float, float, float, [8 x %struct.LightProduct], %s
     truct.IColor4, [8 x i32] } |  | 
| 28         %struct.Minmax = type { %struct.MinmaxTable*, i16, i8, i8, [0 x i32] } |  | 
| 29         %struct.MinmaxTable = type { %struct.IColor4, %struct.IColor4 } |  | 
| 30         %struct.Mipmaplevel = type { [4 x i32], [4 x i32], [4 x float], [4 x i32
     ], i32, i32, float*, i8*, i16, i16, i16, i16, [2 x float] } |  | 
| 31         %struct.Multisample = type { float, i8, i8, i8, i8, i8, i8, i8, i8 } |  | 
| 32         %struct.PipelineProgramState = type { i8, i8, i8, i8, [0 x i32], %struct
     .IColor4* } |  | 
| 33         %struct.PixelMap = type { i32*, float*, float*, float*, float*, float*, 
     float*, float*, float*, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } |  | 
| 34         %struct.PixelMode = type { float, float, %struct.PixelStore, %struct.Pix
     elTransfer, %struct.PixelMap, %struct.ImagingSubset, i32, i32 } |  | 
| 35         %struct.PixelPack = type { i32, i32, i32, i32, i32, i32, i32, i32, i8, i
     8, i8, i8 } |  | 
| 36         %struct.PixelStore = type { %struct.PixelPack, %struct.PixelPack } |  | 
| 37         %struct.PixelTransfer = type { float, float, float, float, float, float,
      float, float, float, float, i32, i32, float, float, float, float, float, float,
      float, float, float, float, float, float } |  | 
| 38         %struct.PluginBufferData = type { i32 } |  | 
| 39         %struct.PointLineLimits = type { float, float, float } |  | 
| 40         %struct.PointMode = type { float, float, float, float, %struct.PointLine
     Limits, float, i8, i8, i8, i8, i16, i16, i32, i16, i16 } |  | 
| 41         %struct.PolygonMode = type { [128 x i8], float, float, i16, i16, i16, i1
     6, i8, i8, i8, i8, i8, i8, i8, i8 } |  | 
| 42         %struct.ProgramLimits = type { i32, i32, i32, i32 } |  | 
| 43         %struct.RegisterCombiners = type { i8, i8, i8, i8, i32, [2 x %struct.ICo
     lor4], [8 x %struct.RegisterCombinersPerStageState], %struct.RegisterCombinersFi
     nalStageState } |  | 
| 44         %struct.RegisterCombinersFinalStageState = type { i8, i8, i8, i8, [7 x %
     struct.RegisterCombinersPerVariableState] } |  | 
| 45         %struct.RegisterCombinersPerPortionState = type { [4 x %struct.RegisterC
     ombinersPerVariableState], i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 } |  | 
| 46         %struct.RegisterCombinersPerStageState = type { [2 x %struct.RegisterCom
     binersPerPortionState], [2 x %struct.IColor4] } |  | 
| 47         %struct.RegisterCombinersPerVariableState = type { i16, i16, i16, i16 } |  | 
| 48         %struct.SWRSurfaceRec = type { i32, i32, i32, i32, i32, i32, i32, i32, i
     32, i32, i8*, i8*, i8*, [4 x i8*], i32 } |  | 
| 49         %struct.ScissorTest = type { %struct.ProgramLimits, i8, i8, i8, i8 } |  | 
| 50         %struct.State = type <{ i16, i16, i16, i16, i32, i32, [256 x %struct.ICo
     lor4], [128 x %struct.IColor4], %struct.Viewport, %struct.Transform, %struct.Lig
     htModel, %struct.ActiveTextureTargets, %struct.AlphaTest, %struct.BlendMode, %st
     ruct.ClearColor, %struct.ColorBuffer, %struct.DepthTest, %struct.ArrayRange, %st
     ruct.FogMode, %struct.HintMode, %struct.LineMode, %struct.LogicOp, %struct.MaskM
     ode, %struct.PixelMode, %struct.PointMode, %struct.PolygonMode, %struct.ScissorT
     est, i32, %struct.StencilTest, [8 x %struct.TextureMode], [16 x %struct.TextureI
     mageMode], %struct.ArrayRange, [8 x %struct.TextureCoordGen], %struct.ClipPlane,
      %struct.Multisample, %struct.RegisterCombiners, %struct.ArrayRange, %struct.Arr
     ayRange, [3 x %struct.PipelineProgramState], %struct.ArrayRange, %struct.Transfo
     rmFeedback, i32*, %struct.FixedFunction, [3 x i32], [3 x i32] }> |  | 
| 51         %struct.StencilTest = type { [3 x { i32, i32, i16, i16, i16, i16 }], i32
     , [4 x i8] } |  | 
| 52         %struct.TextureCoordGen = type { { i16, i16, %struct.IColor4, %struct.IC
     olor4 }, { i16, i16, %struct.IColor4, %struct.IColor4 }, { i16, i16, %struct.ICo
     lor4, %struct.IColor4 }, { i16, i16, %struct.IColor4, %struct.IColor4 }, i8, i8,
      i8, i8 } |  | 
| 53         %struct.TextureGeomState = type { i16, i16, i16, i16, i16, i8, i8, i8, i
     8, i16, i16, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8
     , [6 x i16], [6 x i16] } |  | 
| 54         %struct.TextureImageMode = type { float } |  | 
| 55         %struct.TextureLevel = type { i32, i32, i16, i16, i16, i8, i8, i16, i16,
      i16, i16, i8* } |  | 
| 56         %struct.TextureMode = type { %struct.IColor4, i32, i16, i16, i16, i16, i
     16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, float, float, i16, i1
     6, i16, i16, i16, i16, [4 x i16], i8, i8, i8, i8, [3 x float], [4 x float], floa
     t, float } |  | 
| 57         %struct.TextureParamState = type { i16, i16, i16, i16, i16, i16, %struct
     .IColor4, float, float, float, float, i16, i16, i16, i16, float, i16, i8, i8, i3
     2, i8* } |  | 
| 58         %struct.TextureRec = type { [4 x float], %struct.TextureState*, %struct.
     Mipmaplevel*, %struct.Mipmaplevel*, float, float, float, float, i8, i8, i8, i8, 
     i16, i16, i16, i16, i32, float, [2 x %struct.PPStreamToken] } |  | 
| 59         %struct.TextureState = type { i16, i8, i8, i16, i16, float, i32, %struct
     .SWRSurfaceRec*, %struct.TextureParamState, %struct.TextureGeomState, [0 x i32],
      i8*, i32, %struct.TextureLevel, [1 x [15 x %struct.TextureLevel]] } |  | 
| 60         %struct.Transform = type <{ [24 x [16 x float]], [24 x [16 x float]], [1
     6 x float], float, float, float, float, float, i8, i8, i8, i8, i32, i32, i32, i1
     6, i16, i8, i8, i8, i8, i32 }> |  | 
| 61         %struct.TransformFeedback = type { i8, i8, i8, i8, [0 x i32], [16 x i32]
     , [16 x i32] } |  | 
| 62         %struct.Viewport = type { float, float, float, float, float, float, floa
     t, float, float, float, float, float, float, float, float, float, double, double
     , i32, i32, i32, i32, float, float, float, float } |  | 
| 63         %struct.IColor4 = type { float, float, float, float } |  | 
| 64         %struct.TCoord2 = type { float, float } |  | 
| 65         %struct.VMGPStack = type { [6 x <4 x float>*], <4 x float>*, i32, i32, <
     4 x float>*, <4 x float>**, i32, i32, i32, i32, i32, i32 } |  | 
| 66         %struct.VMTextures = type { [16 x %struct.TextureRec*] } |  | 
| 67         %struct.PPStreamToken = type { { i16, i16, i32 } } |  | 
| 68         %struct._VMConstants = type { <4 x float>, <4 x float>, <4 x float>, <4 
     x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x 
     float>, float, float, float, float, float, float, float, float, float, float, fl
     oat, float, [256 x float], [528 x i8], { void (i8*, i8*, i32, i8*)*, float (floa
     t)*, float (float)*, float (float)*, i32 (float)* } } |  | 
| 69 |  | 
| 70 define i32 @foo(%struct.State* %dst, <4 x float>* %prgrm, <4 x float>** %buffs, 
     %struct._VMConstants* %cnstn, %struct.PPStreamToken* %pstrm, %struct.PluginBuffe
     rData* %gpctx, %struct.VMTextures* %txtrs, %struct.VMGPStack* %gpstk) nounwind { |  | 
| 71 bb266.i: |  | 
| 72         getelementptr <4 x float>* null, i32 11         ; <<4 x float>*>:0 [#use
     s=1] |  | 
| 73         load <4 x float>* %0, align 16          ; <<4 x float>>:1 [#uses=1] |  | 
| 74         shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> < i32 0, i32 
     1, i32 1, i32 1 >               ; <<4 x float>>:2 [#uses=1] |  | 
| 75         shufflevector <4 x float> %2, <4 x float> undef, <4 x i32> < i32 0, i32 
     4, i32 1, i32 5 >               ; <<4 x float>>:3 [#uses=1] |  | 
| 76         shufflevector <4 x float> undef, <4 x float> undef, <4 x i32> < i32 0, i
     32 4, i32 1, i32 5 >            ; <<4 x float>>:4 [#uses=1] |  | 
| 77         shufflevector <4 x float> %4, <4 x float> %3, <4 x i32> < i32 6, i32 7, 
     i32 2, i32 3 >          ; <<4 x float>>:5 [#uses=1] |  | 
| 78         fmul <4 x float> %5, zeroinitializer            ; <<4 x float>>:6 [#uses
     =2] |  | 
| 79         fmul <4 x float> %6, %6         ; <<4 x float>>:7 [#uses=1] |  | 
| 80         fadd <4 x float> zeroinitializer, %7            ; <<4 x float>>:8 [#uses
     =1] |  | 
| 81         call <4 x float> @llvm.x86.sse.max.ps( <4 x float> zeroinitializer, <4 x
      float> %8 ) nounwind readnone          ; <<4 x float>>:9 [#uses=1] |  | 
| 82         %phitmp40 = bitcast <4 x float> %9 to <4 x i32>         ; <<4 x i32>> [#
     uses=1] |  | 
| 83         %tmp4109.i = and <4 x i32> %phitmp40, < i32 8388607, i32 8388607, i32 83
     88607, i32 8388607 >            ; <<4 x i32>> [#uses=1] |  | 
| 84         %tmp4116.i = or <4 x i32> %tmp4109.i, < i32 1065353216, i32 1065353216, 
     i32 1065353216, i32 1065353216 >                ; <<4 x i32>> [#uses=1] |  | 
| 85         %tmp4117.i = bitcast <4 x i32> %tmp4116.i to <4 x float>                
     ; <<4 x float>> [#uses=1] |  | 
| 86         fadd <4 x float> %tmp4117.i, zeroinitializer            ; <<4 x float>>:
     10 [#uses=1] |  | 
| 87         fmul <4 x float> %10, < float 5.000000e-01, float 5.000000e-01, float 5.
     000000e-01, float 5.000000e-01 >                ; <<4 x float>>:11 [#uses=1] |  | 
| 88         call <4 x float> @llvm.x86.sse.max.ps( <4 x float> %11, <4 x float> zero
     initializer ) nounwind readnone         ; <<4 x float>>:12 [#uses=1] |  | 
| 89         call <4 x float> @llvm.x86.sse.min.ps( <4 x float> %12, <4 x float> zero
     initializer ) nounwind readnone         ; <<4 x float>>:13 [#uses=1] |  | 
| 90         %tmp4170.i = call <4 x float> @llvm.x86.sse.cmp.ps( <4 x float> %13, <4 
     x float> zeroinitializer, i8 2 ) nounwind               ; <<4 x float>> [#uses=1
     ] |  | 
| 91         bitcast <4 x float> %tmp4170.i to <16 x i8>             ; <<16 x i8>>:14
      [#uses=1] |  | 
| 92         call i32 @llvm.x86.sse2.pmovmskb.128( <16 x i8> %14 ) nounwind readnone 
             ; <i32>:15 [#uses=1] |  | 
| 93         icmp eq i32 %15, 0              ; <i1>:16 [#uses=1] |  | 
| 94         br i1 %16, label %bb5574.i, label %bb4521.i |  | 
| 95 |  | 
| 96 bb4521.i:               ; preds = %bb266.i |  | 
| 97         unreachable |  | 
| 98 |  | 
| 99 bb5574.i:               ; preds = %bb266.i |  | 
| 100         unreachable |  | 
| 101 } |  | 
| 102 |  | 
| 103 declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind 
     readnone |  | 
| 104 |  | 
| 105 declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>) nounwind readnone |  | 
| 106 |  | 
| 107 declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind read
     none |  | 
| 108 |  | 
| 109 declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind read
     none |  | 
| OLD | NEW | 
|---|