llvm.org GIT mirror llvm / c07e6e5
LegalizeTypes support for promotion of bswap. In LegalizeDAG the value is zero-extended to the new type before byte swapping. It doesn't matter how the extension is done since the new bits are shifted off anyway after the swap, so extend by any old rubbish bits. This results in the final assembler for the testcase being one line shorter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53604 91177308-0d34-0410-b5e6-96231b3b80d8 Duncan Sands 12 years ago
3 changed file(s) with 398 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
5353 assert(0 && "Do not know how to promote this operator!");
5454 abort();
5555 case ISD::BIT_CONVERT: Result = PromoteIntRes_BIT_CONVERT(N); break;
56 case ISD::BSWAP: Result = PromoteIntRes_BSWAP(N); break;
5657 case ISD::BUILD_PAIR: Result = PromoteIntRes_BUILD_PAIR(N); break;
5758 case ISD::Constant: Result = PromoteIntRes_Constant(N); break;
5859 case ISD::CTLZ: Result = PromoteIntRes_CTLZ(N); break;
147148 // promote the load.
148149 SDOperand Op = CreateStackStoreLoad(InOp, N->getValueType(0));
149150 return PromoteIntRes_LOAD(cast(Op.Val));
151 }
152
153 SDOperand DAGTypeLegalizer::PromoteIntRes_BSWAP(SDNode *N) {
154 SDOperand Op = GetPromotedInteger(N->getOperand(0));
155 MVT OVT = N->getValueType(0);
156 MVT NVT = Op.getValueType();
157
158 unsigned DiffBits = NVT.getSizeInBits() - OVT.getSizeInBits();
159 return DAG.getNode(ISD::SRL, NVT, DAG.getNode(ISD::BSWAP, NVT, Op),
160 DAG.getConstant(DiffBits, TLI.getShiftAmountTy()));
150161 }
151162
152163 SDOperand DAGTypeLegalizer::PromoteIntRes_BUILD_PAIR(SDNode *N) {
212212 // Integer Result Promotion.
213213 void PromoteIntegerResult(SDNode *N, unsigned ResNo);
214214 SDOperand PromoteIntRes_BIT_CONVERT(SDNode *N);
215 SDOperand PromoteIntRes_BSWAP(SDNode *N);
215216 SDOperand PromoteIntRes_BUILD_PAIR(SDNode *N);
216217 SDOperand PromoteIntRes_Constant(SDNode *N);
217218 SDOperand PromoteIntRes_CTLZ(SDNode *N);
0 ; RUN: llvm-as < %s | llc
1 target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128"
2 target triple = "powerpc-apple-darwin9"
3 %struct.BiPartSrcDescriptor = type <{ %"struct.BiPartSrcDescriptor::$_105" }>
4 %"struct.BiPartSrcDescriptor::$_105" = type { %struct.BiPartSrcDescriptor_NO_VECTOR_ALIGNMENT_size_is_16 }
5 %struct.BiPartSrcDescriptor_NO_VECTOR_ALIGNMENT_size_is_16 = type { [2 x %struct.MotionVectors], [2 x i8], %struct.Map4x4ToPartIdx, [2 x i8], i8, i8 }
6 %struct.Condv = type opaque
7 %struct.DHBFLayerId = type { i8 }
8 %struct.DecodeComplexityInfo = type { i32, i32, i32, i32, %"struct.DecodeComplexityInfo::IntraStats", %"struct.DecodeComplexityInfo::InterStats" }
9 %"struct.DecodeComplexityInfo::InterStats" = type { i32, i32, i32, i32, [5 x i32], [3 x i32], [4 x [4 x i32]], [4 x i32], i32, %struct.MotionVectors, %struct.MotionVectors }
10 %"struct.DecodeComplexityInfo::IntraStats" = type { i32, i32, i32, [5 x i32], [3 x i32], [4 x i32], [3 x i32] }
11 %struct.DecodeComplexityOptions = type { i8, i8, i32, double, i8, float, i8, float, i8, i8, i8, i8, i8 }
12 %struct.DescriptorAllocator = type { %struct.Mutex*, %struct.Mutex*, i8**, i32, i32, i8**, i32, i32, i8**, i32, i32 }
13 %struct.DetailsFromSliceType = type <{ i8 }>
14 %struct.FlatnessAnalysis = type { i16, i16, i32, i32*, i8*, [512 x i32], [256 x i32] }
15 %struct.Frame = type <{ i8, i8, i8, i8, i8, [3 x i8], i32, i32, %struct.Mutex*, %struct.Condv*, [8 x i8], %struct.FramePixels, %struct.FrameMotionVectorCache, %struct.FrameIndex, i32, i8*, i8*, i8*, i8*, i16*, %struct.FlatnessAnalysis, %struct.NoiseAnalysis, %struct.VisualActivity, %struct.FrameMotionInfo, %struct.FrameMotionAnalysis, %struct.FrameDataRateParameters, %struct.FrameEncoderTags, %struct.DecodeComplexityInfo, %struct.DecodeComplexityOptions, %struct.MotionInfoFor16x16_FasterSP*, [1 x i32] }>
16 %struct.FrameDataRateParameters = type { i32, float, i8, i8 }
17 %struct.FrameEncoderTags = type { i8, i8, i32, i8, i8, float }
18 %struct.FrameIndex = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i32, i32, %struct.Frame*, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, %struct.DHBFLayerId }
19 %struct.FrameMotionAnalysis = type { i32, i32, i32, %struct.MoEstMotion16x16*, %struct.MbAnalysis*, i32, i32, i16, i16, i32, i32, i32, i32, i8, i8 }
20 %struct.FrameMotionInfo = type { i32, i32, %struct.MoEstMbMotionInfo*, i32, i32, i32, i32, i32 }
21 %struct.FrameMotionVectorCache = type <{ %struct.ThreadAllocator**, i32, i32, i32, %struct.BiPartSrcDescriptor, %struct.BiPartSrcDescriptor, %struct.BiPartSrcDescriptor, [3 x %struct.BiPartSrcDescriptor*], %struct.BiPartSrcDescriptor** }>
22 %struct.FramePixels = type <{ i8, i8, i8, i8, i8, i8, i8, i8, i8*, i8*, i32, [4 x i8*], [4 x i8*], [2 x [4 x i32]], [2 x [4 x i32]], %struct.PixelData, %struct.InterpolationCache*, %struct.InterpolationCache*, %struct.InterpolationCache*, [16 x i16], [16 x i16], [12 x i8], %"struct.PortableSInt32Array<4>", %"struct.PortableSInt32Array<8>", %struct.ICOffsetArraysY, %struct.UVSrcOffsetEtcX_Struct*, i32*, i32*, [3 x i32] }>
23 %struct.ICOffsetArraysY = type { [21 x i32], [21 x i32], [4 x [21 x i32]] }
24 %struct.InterpolationCache = type opaque
25 %struct.LoopFilterInfo = type { %struct.BiPartSrcDescriptor**, i32, i32, i32, i32, i32*, i32, %"struct.LoopFilterInfo::SliceInfoStruct"*, i32, %struct.Mutex*, i16*, %struct.FramePixels*, i8*, i8*, i8*, i8*, i8*, %struct.PerMacroblockBoundaryStrengths*, %struct.Mutex*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8*, i8*, i8, void (i8*, i8*, i32, i32, i32, i32, i32, i8*, i32)*, void (i8*, i8*, i32, i32, i32, i32, i32, i8*, i32, i8*)*, i32 }
26 %"struct.LoopFilterInfo::SliceInfoStruct" = type { %"struct.LoopFilterInfo::SliceInfoStruct::LFDisableStats", i8, i8, i8, i8, [17 x %struct.Frame*], [17 x %struct.Frame*] }
27 %"struct.LoopFilterInfo::SliceInfoStruct::LFDisableStats" = type { i32, i32 }
28 %struct.LoopFilterParam = type { i32, %struct.LoopFilterInfo*, %struct.FramePixels*, %struct.FrameMotionVectorCache* }
29 %struct.Map4x4ToPartIdx = type { i16 }
30 %struct.MbAnalysis = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, %struct.RdCost, %struct.RdCost, i32 }
31 %struct.MoEstMbMotionInfo = type { i32, i32, i32, i32, [16 x %struct.MoEstPartMotionInfo] }
32 %struct.MoEstMotion16x16 = type { [2 x i8], [2 x %struct.MotionVectors], i8, [3 x %struct.MoEstPredCost] }
33 %struct.MoEstPartMotionInfo = type { i32, %struct.PartGeom, i32, i32, [2 x %struct.MotionVectors], [2 x i8], i16 }
34 %struct.MoEstPredCost = type { i32, i16, i16 }
35 %struct.MotionInfoFor16x16_FasterSP = type { [2 x %struct.MotionVectors], [2 x i8], i8, [2 x i32], i32, i32 }
36 %struct.MotionVectors = type { %"struct.MotionVectors::$_103" }
37 %"struct.MotionVectors::$_103" = type { i32 }
38 %struct.Mutex = type opaque
39 %struct.NoiseAnalysis = type { i16, i16, i32, i8*, i8*, i8*, [512 x i32] }
40 %struct.PartGeom = type { %struct.Map4x4ToPartIdx }
41 %struct.PerMacroblockBoundaryStrengths = type { [16 x i8], [16 x i8], [4 x i8], [4 x i8], [2 x i32] }
42 %struct.PixelData = type { i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8 }
43 %"struct.PortableSInt32Array<4>" = type { [4 x i32] }
44 %"struct.PortableSInt32Array<8>" = type { [8 x i32] }
45 %struct.RdCost = type { i32, i32, i32, double }
46 %struct.ThreadAllocator = type { %struct.DescriptorAllocator*, %struct.BiPartSrcDescriptor*, [256 x %struct.BiPartSrcDescriptor*], i32, i32, i32 }
47 %struct.ThreadedBatch = type opaque
48 %struct.UVSrcOffsetEtcX_Struct = type <{ i16 }>
49 %struct.VisualActivity = type { i16, i16, i32, i32, i32*, i32*, i32, i32, i32*, i32, i32, i32, i32, i32, i8*, i32, [2 x i32], i32, i32, i32, i16*, i16, i16, i16, i16, float, i8*, i32*, i32, i32, i8 }
50 @_ZL33table_8_14_indexA_to_alpha_scalar = external constant [64 x i8] ; <[64 x i8]*> [#uses=0]
51 @_ZL32table_8_14_indexB_to_beta_scalar = external constant [64 x i8] ; <[64 x i8]*> [#uses=0]
52 @_ZL34table_8_15_indexA_bS_to_tc0_scalar = external constant [64 x [4 x i8]] ; <[64 x [4 x i8]]*> [#uses=0]
53 @gkDummy = external global i32 ; [#uses=0]
54 @gkDetailsFromSliceTypeArray = external constant [10 x %struct.DetailsFromSliceType] ; <[10 x %struct.DetailsFromSliceType]*> [#uses=0]
55
56 declare i32 @_Z20LoopFilter_ConstructP14LoopFilterInfojj(%struct.LoopFilterInfo*, i32, i32)
57
58 declare i32 @_Z25LF_Threading2_assert_doneP14LoopFilterInfo(%struct.LoopFilterInfo*) nounwind
59
60 declare i32 @_Z54S_CalcIfLargeMVDeltaForBMbBothPredictionsFromSameFramePK19BiPartSrcDescriptorS1_ijj(%struct.BiPartSrcDescriptor*, %struct.BiPartSrcDescriptor*, i32, i32, i32) nounwind
61
62 declare void @_Z30LoopFilter_Internal_FilterLumaPhiiiiii(i8*, i32, i32, i32, i32, i32, i32) nounwind
63
64 declare void @_Z33LoopFilter_Internal_FilterChromaVPhiiiiiiiiii(i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind
65
66 declare void @_Z33LoopFilter_Internal_FilterChromaHPhiiiiii(i8*, i32, i32, i32, i32, i32, i32) nounwind
67
68 declare void @_Z42LoopFilter_Internal_filter_macroblock_lumaPK14LoopFilterInfoPhS2_iiiPK30PerMacroblockBoundaryStrengthsjj(%struct.LoopFilterInfo*, i8*, i8*, i32, i32, i32, %struct.PerMacroblockBoundaryStrengths*, i32, i32) nounwind
69
70 declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) nounwind
71
72 declare i32 @_Z40LoopFilter_Internal_FilterLumaPlaneMBAFFPK14LoopFilterInfojjj(%struct.LoopFilterInfo*, i32, i32, i32) nounwind
73
74 declare void @_Z18LoopFilter_DestroyP14LoopFilterInfo(%struct.LoopFilterInfo*)
75
76 declare void @MutexDispose(%struct.Mutex*)
77
78 declare void @_ZdaPv(i8*) nounwind
79
80 declare void @jvtDisposePTRVectorAligned(i8*)
81
82 declare void @jvtDisposePTR(i8*)
83
84 declare void @jvtDisposePTRMemAligned(i8*)
85
86 declare void @_Z31LoopFilter_Internal_ResetTablesP14LoopFilterInfo(%struct.LoopFilterInfo*) nounwind
87
88 declare void @llvm.memset.i32(i8*, i8, i32, i32) nounwind
89
90 define i32 @_Z60LoopFilter_Internal_CalculateBoundaryStrengths_MbaffFramePicPK14LoopFilterInfoP22FrameMotionVectorCachejj(%struct.LoopFilterInfo* %lfiPtr, %struct.FrameMotionVectorCache* %frameMotionVectorCachePtr, i32 %mbY_min, i32 %mbY_maxPlus1) nounwind {
91 entry:
92 icmp ult i32 %mbY_min, %mbY_maxPlus1 ; :0 [#uses=1]
93 br i1 %0, label %bb16, label %bb642
94
95 bb16: ; preds = %entry
96 bitcast %struct.PerMacroblockBoundaryStrengths* null to i32* ; :1 [#uses=3]
97 getelementptr i32* %1, i32 1 ; :2 [#uses=0]
98 getelementptr i32* %1, i32 2 ; :3 [#uses=0]
99 getelementptr i32* %1, i32 3 ; :4 [#uses=0]
100 bitcast [16 x i8]* null to i32* ; :5 [#uses=3]
101 getelementptr i32* %5, i32 1 ; :6 [#uses=0]
102 getelementptr i32* %5, i32 2 ; :7 [#uses=0]
103 getelementptr i32* %5, i32 3 ; :8 [#uses=0]
104 icmp eq i32 0, 0 ; :9 [#uses=0]
105 lshr i32 0, 30 ; :10 [#uses=0]
106 and i32 0, 268435455 ; :11 [#uses=0]
107 lshr i32 0, 28 ; :12 [#uses=1]
108 and i32 %12, 3 ; :13 [#uses=0]
109 and i32 0, 1 ; :14 [#uses=1]
110 icmp eq i32 %14, 0 ; :15 [#uses=0]
111 zext i8 0 to i32 ; :16 [#uses=1]
112 %.not656 = icmp ne i32 0, 0 ; [#uses=1]
113 icmp eq i8 0, 0 ; :17 [#uses=0]
114 trunc i32 0 to i8 ; :18 [#uses=2]
115 add i32 0, 1 ; :19 [#uses=1]
116 %.not658 = icmp ne i32 0, 0 ; [#uses=1]
117 and i32 0, 268369920 ; :20 [#uses=1]
118 icmp eq i32 %20, 268369920 ; :21 [#uses=2]
119 getelementptr %struct.PerMacroblockBoundaryStrengths* null, i32 0, i32 2 ; <[4 x i8]*>:22 [#uses=1]
120 getelementptr %struct.PerMacroblockBoundaryStrengths* null, i32 0, i32 2, i32 0 ; :23 [#uses=0]
121 and i32 0, -2 ; :24 [#uses=1]
122 add i32 %24, -1 ; :25 [#uses=0]
123 bitcast [4 x i8]* %22 to i32* ; :26 [#uses=3]
124 getelementptr i32* %26, i32 1 ; :27 [#uses=0]
125 getelementptr i32* %26, i32 2 ; :28 [#uses=0]
126 getelementptr i32* %26, i32 3 ; :29 [#uses=0]
127 br label %bb144
128
129 bb144: ; preds = %bb395, %bb16
130 %idxEachField11.0773 = phi i32 [ 0, %bb16 ], [ %162, %bb395 ] ; [#uses=3]
131 %mbYLeft.2776 = phi i32 [ 0, %bb16 ], [ %mbYLeft.2776, %bb395 ] ; [#uses=3]
132 %mbXYLeft.2775 = phi i32 [ 0, %bb16 ], [ %mbXYLeft.2775, %bb395 ] ; [#uses=1]
133 %mixedModeLeftEdgeOfMbFlag.2774 = phi i32 [ 0, %bb16 ], [ 0, %bb395 ] ; [#uses=0]
134 %mbIndexLeft.2772 = phi i32 [ 0, %bb16 ], [ %mbIndexLeft.2772, %bb395 ] ; [#uses=2]
135 %boundaryStrengthsV.1771 = phi i8* [ null, %bb16 ], [ %158, %bb395 ] ; [#uses=2]
136 %numEdgesToTest.1770 = phi i32 [ 4, %bb16 ], [ %numEdgesToTest.2, %bb395 ] ; [#uses=1]
137 icmp eq i32 %idxEachField11.0773, 0 ; :30 [#uses=0]
138 getelementptr %struct.BiPartSrcDescriptor** null, i32 %mbIndexLeft.2772 ; <%struct.BiPartSrcDescriptor**>:31 [#uses=1]
139 load %struct.BiPartSrcDescriptor** %31, align 4 ; <%struct.BiPartSrcDescriptor*>:32 [#uses=0]
140 %fMacroblockHasNonZeroBS.4 = select i1 %21, i32 1, i32 0 ; [#uses=1]
141 %numEdgesToTest.2 = select i1 %21, i32 1, i32 %numEdgesToTest.1770 ; [#uses=2]
142 store i8 32, i8* %boundaryStrengthsV.1771, align 1
143 br label %labelContinueEdgesLoopV
144
145 bb200: ; preds = %labelContinueEdgesLoopV
146 lshr i32 %159, 28 ; :33 [#uses=2]
147 and i32 %160, %16 ; :34 [#uses=1]
148 icmp eq i32 %34, 0 ; :35 [#uses=0]
149 icmp eq i32 %160, 0 ; :36 [#uses=3]
150 zext i1 %36 to i32 ; :37 [#uses=1]
151 or i32 %37, -1 ; :38 [#uses=1]
152 or i32 %38, %33 ; :39 [#uses=1]
153 icmp eq i32 %39, 0 ; :40 [#uses=1]
154 br i1 %40, label %bb205, label %bb206
155
156 bb205: ; preds = %bb200
157 store i8 32, i8* %158, align 1
158 br label %labelContinueEdgesLoopV
159
160 bb206: ; preds = %bb200
161 icmp eq i32 %33, 15 ; :41 [#uses=1]
162 br i1 %41, label %labelContinueEdgesLoopV, label %bb210.preheader
163
164 bb210.preheader: ; preds = %bb206
165 add i32 %160, 0 ; :42 [#uses=2]
166 %bothcond657 = and i1 %36, %.not656 ; [#uses=0]
167 shl i32 %idxEachField11.0773, 1 ; :43 [#uses=1]
168 add i32 %43, 0 ; :44 [#uses=0]
169 shl i32 %mbYLeft.2776, 2 ; :45 [#uses=0]
170 add i32 %42, -1 ; :46 [#uses=1]
171 icmp eq i32 0, 0 ; :47 [#uses=1]
172 %brmerge689.not = and i1 %47, false ; [#uses=0]
173 %bothcond659 = and i1 %36, %.not658 ; [#uses=0]
174 shl i32 %mbYLeft.2776, 1 ; :48 [#uses=1]
175 or i32 %48, 0 ; :49 [#uses=1]
176 shl i32 %49, 1 ; :50 [#uses=0]
177 add i32 0, 0 ; :51 [#uses=2]
178 mul i32 %51, 0 ; :52 [#uses=1]
179 add i32 %52, %42 ; :53 [#uses=1]
180 mul i32 %51, 0 ; :54 [#uses=1]
181 add i32 %46, %54 ; :55 [#uses=1]
182 getelementptr %struct.BiPartSrcDescriptor** null, i32 %53 ; <%struct.BiPartSrcDescriptor**>:56 [#uses=1]
183 load %struct.BiPartSrcDescriptor** %56, align 4 ; <%struct.BiPartSrcDescriptor*>:57 [#uses=7]
184 getelementptr %struct.BiPartSrcDescriptor** null, i32 %55 ; <%struct.BiPartSrcDescriptor**>:58 [#uses=1]
185 load %struct.BiPartSrcDescriptor** %58, align 4 ; <%struct.BiPartSrcDescriptor*>:59 [#uses=5]
186 icmp slt i32 %159, 0 ; :60 [#uses=0]
187 icmp eq %struct.BiPartSrcDescriptor* %57, %59 ; :61 [#uses=0]
188 bitcast %struct.BiPartSrcDescriptor* %57 to i16* ; :62 [#uses=5]
189 load i16* %62, align 2 ; :63 [#uses=2]
190 getelementptr i16* %62, i32 1 ; :64 [#uses=1]
191 load i16* %64, align 2 ; :65 [#uses=2]
192 getelementptr i16* %62, i32 2 ; :66 [#uses=1]
193 load i16* %66, align 2 ; :67 [#uses=2]
194 getelementptr i16* %62, i32 3 ; :68 [#uses=1]
195 load i16* %68, align 2 ; :69 [#uses=2]
196 getelementptr i16* %62, i32 6 ; :70 [#uses=1]
197 load i16* %70, align 2 ; :71 [#uses=2]
198 bitcast %struct.BiPartSrcDescriptor* %59 to i16* ; :72 [#uses=5]
199 load i16* %72, align 2 ; :73 [#uses=2]
200 getelementptr i16* %72, i32 1 ; :74 [#uses=1]
201 load i16* %74, align 2 ; :75 [#uses=2]
202 getelementptr i16* %72, i32 2 ; :76 [#uses=1]
203 load i16* %76, align 2 ; :77 [#uses=2]
204 getelementptr i16* %72, i32 3 ; :78 [#uses=1]
205 load i16* %78, align 2 ; :79 [#uses=2]
206 getelementptr i16* %72, i32 6 ; :80 [#uses=1]
207 load i16* %80, align 2 ; :81 [#uses=2]
208 sub i16 %63, %73 ; :82 [#uses=3]
209 sub i16 %65, %75 ; :83 [#uses=3]
210 sub i16 %67, %77 ; :84 [#uses=3]
211 sub i16 %69, %79 ; :85 [#uses=3]
212 sub i16 %71, %81 ; :86 [#uses=3]
213 sub i16 0, %82 ; :87 [#uses=1]
214 icmp slt i16 %82, 0 ; :88 [#uses=1]
215 %. = select i1 %88, i16 %87, i16 %82 ; [#uses=1]
216 sub i16 0, %83 ; :89 [#uses=1]
217 icmp slt i16 %83, 0 ; :90 [#uses=1]
218 %.660 = select i1 %90, i16 %89, i16 %83 ; [#uses=1]
219 sub i16 0, %84 ; :91 [#uses=1]
220 icmp slt i16 %84, 0 ; :92 [#uses=1]
221 %.661 = select i1 %92, i16 %91, i16 %84 ; [#uses=1]
222 sub i16 0, %85 ; :93 [#uses=1]
223 icmp slt i16 %85, 0 ; :94 [#uses=1]
224 %.662 = select i1 %94, i16 %93, i16 %85 ; [#uses=1]
225 sub i16 0, %86 ; :95 [#uses=1]
226 icmp slt i16 %86, 0 ; :96 [#uses=1]
227 %.663 = select i1 %96, i16 %95, i16 %86 ; [#uses=1]
228 getelementptr %struct.BiPartSrcDescriptor* %57, i32 0, i32 0, i32 0, i32 1, i32 0 ; :97 [#uses=1]
229 load i8* %97, align 1 ; :98 [#uses=1]
230 zext i8 %98 to i32 ; :99 [#uses=1]
231 getelementptr %struct.BiPartSrcDescriptor* %57, i32 0, i32 0, i32 0, i32 1, i32 1 ; :100 [#uses=1]
232 load i8* %100, align 1 ; :101 [#uses=1]
233 zext i8 %101 to i32 ; :102 [#uses=1]
234 getelementptr %struct.BiPartSrcDescriptor* %57, i32 0, i32 0, i32 0, i32 3, i32 0 ; :103 [#uses=1]
235 load i8* %103, align 1 ; :104 [#uses=2]
236 zext i8 %104 to i32 ; :105 [#uses=1]
237 getelementptr %struct.BiPartSrcDescriptor* %59, i32 0, i32 0, i32 0, i32 3, i32 0 ; :106 [#uses=1]
238 load i8* %106, align 1 ; :107 [#uses=2]
239 zext i8 %107 to i32 ; :108 [#uses=1]
240 getelementptr %struct.BiPartSrcDescriptor* %57, i32 0, i32 0, i32 0, i32 3, i32 1 ; :109 [#uses=1]
241 load i8* %109, align 1 ; :110 [#uses=1]
242 zext i8 %110 to i32 ; :111 [#uses=1]
243 getelementptr %struct.BiPartSrcDescriptor* %59, i32 0, i32 0, i32 0, i32 3, i32 1 ; :112 [#uses=1]
244 load i8* %112, align 1 ; :113 [#uses=1]
245 zext i8 %113 to i32 ; :114 [#uses=1]
246 lshr i32 %99, 4 ; :115 [#uses=1]
247 and i32 %115, 2 ; :116 [#uses=1]
248 lshr i32 %102, 5 ; :117 [#uses=1]
249 or i32 %116, %117 ; :118 [#uses=3]
250 icmp eq i32 %118, 0 ; :119 [#uses=0]
251 icmp eq i32 %118, 1 ; :120 [#uses=1]
252 br i1 %120, label %bb297, label %bb298
253
254 bb297: ; preds = %bb210.preheader
255 br label %bb298
256
257 bb298: ; preds = %bb297, %bb210.preheader
258 %vu8Mask_0.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=1]
259 %vu8Mask_1.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=1]
260 %vu8Mask_2.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=0]
261 %vu8Mask_3.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=1]
262 %vu8Mask_4.1 = phi i8 [ 0, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=0]
263 %vu8Mask_5.1 = phi i8 [ 0, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=1]
264 %vu8Mask_6.1 = phi i8 [ 0, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=0]
265 %vu8Mask_7.1 = phi i8 [ 0, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=1]
266 %vu8Mask_12.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=0]
267 %vu8Mask_13.1 = phi i8 [ -1, %bb297 ], [ 0, %bb210.preheader ] ; [#uses=0]
268 icmp eq i32 %118, 2 ; :121 [#uses=0]
269 and i8 %vu8Mask_1.1, 3 ; :122 [#uses=0]
270 and i8 %vu8Mask_5.1, 3 ; :123 [#uses=0]
271 and i8 %vu8Mask_3.1, %18 ; :124 [#uses=0]
272 and i8 %vu8Mask_7.1, %18 ; :125 [#uses=0]
273 icmp eq i8 %104, %107 ; :126 [#uses=1]
274 br i1 %126, label %bb328, label %bb303
275
276 bb303: ; preds = %bb298
277 call i16 @llvm.bswap.i16( i16 %81 ) ; :127 [#uses=1]
278 sub i16 %63, %77 ; :128 [#uses=3]
279 sub i16 %65, %79 ; :129 [#uses=3]
280 sub i16 %67, %73 ; :130 [#uses=3]
281 sub i16 %69, %75 ; :131 [#uses=3]
282 sub i16 %71, %127 ; :132 [#uses=3]
283 sub i16 0, %128 ; :133 [#uses=1]
284 icmp slt i16 %128, 0 ; :134 [#uses=1]
285 %.673 = select i1 %134, i16 %133, i16 %128 ; [#uses=1]
286 sub i16 0, %129 ; :135 [#uses=1]
287 icmp slt i16 %129, 0 ; :136 [#uses=1]
288 %.674 = select i1 %136, i16 %135, i16 %129 ; [#uses=1]
289 sub i16 0, %130 ; :137 [#uses=1]
290 icmp slt i16 %130, 0 ; :138 [#uses=1]
291 %.675 = select i1 %138, i16 %137, i16 %130 ; [#uses=1]
292 sub i16 0, %131 ; :139 [#uses=1]
293 icmp slt i16 %131, 0 ; :140 [#uses=1]
294 %.676 = select i1 %140, i16 %139, i16 %131 ; [#uses=1]
295 sub i16 0, %132 ; :141 [#uses=1]
296 icmp slt i16 %132, 0 ; :142 [#uses=1]
297 %.677 = select i1 %142, i16 %141, i16 %132 ; [#uses=1]
298 br label %bb328
299
300 bb328: ; preds = %bb303, %bb298
301 %vu16Delta_0.0 = phi i16 [ %.673, %bb303 ], [ %., %bb298 ] ; [#uses=1]
302 %vu16Delta_1.0 = phi i16 [ %.674, %bb303 ], [ %.660, %bb298 ] ; [#uses=0]
303 %vu16Delta_2.0 = phi i16 [ %.675, %bb303 ], [ %.661, %bb298 ] ; [#uses=0]
304 %vu16Delta_3.0 = phi i16 [ %.676, %bb303 ], [ %.662, %bb298 ] ; [#uses=0]
305 %vu16Delta_6.0 = phi i16 [ %.677, %bb303 ], [ %.663, %bb298 ] ; [#uses=0]
306 lshr i16 %vu16Delta_0.0, 8 ; :143 [#uses=1]
307 trunc i16 %143 to i8 ; :144 [#uses=1]
308 and i8 %144, %vu8Mask_0.1 ; :145 [#uses=1]
309 icmp eq i8 %145, 0 ; :146 [#uses=0]
310 sub i32 %105, %114 ; :147 [#uses=1]
311 sub i32 %111, %108 ; :148 [#uses=1]
312 or i32 %147, %148 ; :149 [#uses=1]
313 icmp eq i32 %149, 0 ; :150 [#uses=0]
314 call i32 @_Z54S_CalcIfLargeMVDeltaForBMbBothPredictionsFromSameFramePK19BiPartSrcDescriptorS1_ijj( %struct.BiPartSrcDescriptor* %57, %struct.BiPartSrcDescriptor* %59, i32 %19, i32 0, i32 0 ) nounwind ; :151 [#uses=0]
315 unreachable
316
317 labelContinueEdgesLoopV: ; preds = %bb206, %bb205, %bb144
318 %fEdgeHasNonZeroBS.0 = phi i32 [ 0, %bb205 ], [ 0, %bb144 ], [ 1, %bb206 ] ; [#uses=2]
319 %fMacroblockHasNonZeroBS.6 = phi i32 [ %152, %bb205 ], [ %fMacroblockHasNonZeroBS.4, %bb144 ], [ %152, %bb206 ] ; [#uses=1]
320 %ixEdge.1 = phi i32 [ %160, %bb205 ], [ 0, %bb144 ], [ %160, %bb206 ] ; [#uses=1]
321 %bfNZ12.2 = phi i32 [ %159, %bb205 ], [ 0, %bb144 ], [ %159, %bb206 ] ; [#uses=1]
322 %boundaryStrengthsV.3 = phi i8* [ %158, %bb205 ], [ %boundaryStrengthsV.1771, %bb144 ], [ %158, %bb206 ] ; [#uses=3]
323 or i32 %fMacroblockHasNonZeroBS.6, %fEdgeHasNonZeroBS.0 ; :152 [#uses=2]
324 load i8* %boundaryStrengthsV.3, align 1 ; :153 [#uses=1]
325 trunc i32 %fEdgeHasNonZeroBS.0 to i8 ; :154 [#uses=1]
326 shl i8 %154, 5 ; :155 [#uses=1]
327 xor i8 %155, 32 ; :156 [#uses=1]
328 or i8 %153, %156 ; :157 [#uses=1]
329 store i8 %157, i8* %boundaryStrengthsV.3, align 1
330 getelementptr i8* %boundaryStrengthsV.3, i32 4 ; :158 [#uses=4]
331 shl i32 %bfNZ12.2, 4 ; :159 [#uses=4]
332 add i32 %ixEdge.1, 1 ; :160 [#uses=6]
333 icmp ult i32 %160, %numEdgesToTest.2 ; :161 [#uses=1]
334 br i1 %161, label %bb200, label %bb395
335
336 bb395: ; preds = %labelContinueEdgesLoopV
337 add i32 %idxEachField11.0773, 1 ; :162 [#uses=2]
338 icmp ugt i32 %162, 0 ; :163 [#uses=1]
339 br i1 %163, label %bb398, label %bb144
340
341 bb398: ; preds = %bb395
342 call void asm sideeffect "dcbt $0, $1", "b%,r,~{memory}"( i32 19, i32* null ) nounwind
343 unreachable
344
345 bb642: ; preds = %entry
346 ret i32 0
347 }
348
349 declare i16 @llvm.bswap.i16(i16) nounwind readnone
350
351 declare i8* @jvtNewPtrVectorAligned(i32)
352
353 declare i8* @jvtNewPtr(i32)
354
355 declare i8* @jvtNewPtrMemAligned(i32)
356
357 declare %struct.Mutex* @MutexNew()
358
359 declare i8* @_Znam(i32)
360
361 declare i32 @_Z24LoopFilter_FilterMbGroupP14LoopFilterInfoP11FramePixelsP22FrameMotionVectorCacheP19ThreadedBatchStructjjij(%struct.LoopFilterInfo*, %struct.FramePixels*, %struct.FrameMotionVectorCache*, %struct.ThreadedBatch*, i32, i32, i32, i32)
362
363 declare void @MutexLock(%struct.Mutex*)
364
365 declare void @MutexUnlock(%struct.Mutex*)
366
367 declare i32 @_Z35LoopFilter_Internal_FilterLumaPlanePK14LoopFilterInfojjjjj(%struct.LoopFilterInfo*, i32, i32, i32, i32, i32)
368
369 declare i32 @_Z37LoopFilter_Internal_FilterChromaPlanePK14LoopFilterInfojjjjj(%struct.LoopFilterInfo*, i32, i32, i32, i32, i32)
370
371 declare void @_Z44LoopFilter_Internal_filter_macroblock_chromaPK14LoopFilterInfoPhS2_iiiPK30PerMacroblockBoundaryStrengthsjj(%struct.LoopFilterInfo*, i8*, i8*, i32, i32, i32, %struct.PerMacroblockBoundaryStrengths*, i32, i32) nounwind
372
373 declare i32 @_Z42LoopFilter_Internal_FilterChromaPlaneMBAFFPK14LoopFilterInfojjj(%struct.LoopFilterInfo*, i32, i32, i32) nounwind
374
375 declare i32 @_Z26LF_Threading2_ProcessTasksP14LoopFilterInfoP11FramePixelsP22FrameMotionVectorCacheij(%struct.LoopFilterInfo*, %struct.FramePixels*, %struct.FrameMotionVectorCache*, i32, i32)
376
377 declare i32 @_Z46LoopFilter_Internal_CalculateBoundaryStrengthsPK14LoopFilterInfoP22FrameMotionVectorCachejj(%struct.LoopFilterInfo*, %struct.FrameMotionVectorCache*, i32, i32)
378
379 declare i32 @_Z44LoopFilter_Internal_FilterLumaChromaPlane_PPP14LoopFilterInfojjjjj(%struct.LoopFilterInfo*, i32, i32, i32, i32, i32)
380
381 declare i32 @_Z22LoopFilter_FilterFrameP14LoopFilterInfoP11FramePixelsP22FrameMotionVectorCacheP19ThreadedBatchStructij(%struct.LoopFilterInfo*, %struct.FramePixels*, %struct.FrameMotionVectorCache*, %struct.ThreadedBatch*, i32, i32)
382
383 declare void @_Z34LF_Threading2_ProcessTasks_WrapperPv(i8*)
384
385 declare void @llvm.memset.i64(i8*, i8, i64, i32) nounwind