[LLVMdev] bb-vectorizer transforms only part of the block
Frank Winter
fwinter at jlab.org
Mon Jun 22 12:50:32 PDT 2015
The loads, stores and float arithmetic in attached function should be
completely vectorizable. The bb-vectorizer does a good job at first, but
from instruction %96 on it messes up by adding unnecessary
vectorshuffles. (The function was designed so that no shuffle would be
needed in order to vectorize it).
I tested this with llvm 3.6 with the following command:
~/toolchain/install/llvm-3.6/bin/opt -basicaa -bb-vectorize -instcombine
-S < func_vec_8x8_complex_mul.ll
See below for the output which I truncated after a few vectorshuffles.
Is there a general limitation to bb-vectorize in terms of a maximum
number of instructions that can be vectorized? Are there any 'magic'
numbers in the pass that can be tweaked?
Thanks,
Frank
; ModuleID = '<stdin>'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @main(i64 %lo, i64 %hi, float* noalias %arg0, float* noalias
%arg1, float* noalias %arg2) {
entrypoint:
%0 = getelementptr float* %arg1, i64 64
%1 = getelementptr float* %arg2, i64 64
%2 = getelementptr float* %arg0, i64 64
%3 = bitcast float* %arg1 to <4 x float>*
%4 = bitcast float* %0 to <4 x float>*
%5 = bitcast float* %arg2 to <4 x float>*
%6 = bitcast float* %1 to <4 x float>*
%7 = load <4 x float>* %3, align 16
%8 = load <4 x float>* %4, align 16
%9 = load <4 x float>* %5, align 16
%10 = load <4 x float>* %6, align 16
%11 = fmul <4 x float> %10, %7
%12 = fmul <4 x float> %9, %8
%13 = fadd <4 x float> %12, %11
%14 = bitcast float* %2 to <4 x float>*
%15 = fmul <4 x float> %10, %8
%16 = fmul <4 x float> %9, %7
%17 = fsub <4 x float> %16, %15
%18 = bitcast float* %arg0 to <4 x float>*
store <4 x float> %17, <4 x float>* %18, align 16
store <4 x float> %13, <4 x float>* %14, align 16
%19 = getelementptr float* %arg1, i64 4
%20 = getelementptr float* %arg1, i64 68
%21 = getelementptr float* %arg2, i64 4
%22 = getelementptr float* %arg2, i64 68
%23 = getelementptr float* %arg0, i64 4
%24 = getelementptr float* %arg0, i64 68
%25 = bitcast float* %19 to <4 x float>*
%26 = bitcast float* %20 to <4 x float>*
%27 = bitcast float* %21 to <4 x float>*
%28 = bitcast float* %22 to <4 x float>*
%29 = load <4 x float>* %25, align 16
%30 = load <4 x float>* %26, align 16
%31 = load <4 x float>* %27, align 16
%32 = load <4 x float>* %28, align 16
%33 = fmul <4 x float> %32, %29
%34 = fmul <4 x float> %31, %30
%35 = fadd <4 x float> %34, %33
%36 = bitcast float* %24 to <4 x float>*
%37 = fmul <4 x float> %32, %30
%38 = fmul <4 x float> %31, %29
%39 = fsub <4 x float> %38, %37
%40 = bitcast float* %23 to <4 x float>*
store <4 x float> %39, <4 x float>* %40, align 16
store <4 x float> %35, <4 x float>* %36, align 16
%41 = getelementptr float* %arg1, i64 8
%42 = getelementptr float* %arg1, i64 72
%43 = getelementptr float* %arg2, i64 8
%44 = getelementptr float* %arg2, i64 72
%45 = getelementptr float* %arg0, i64 8
%46 = getelementptr float* %arg0, i64 72
%47 = bitcast float* %41 to <4 x float>*
%48 = bitcast float* %42 to <4 x float>*
%49 = bitcast float* %43 to <4 x float>*
%50 = bitcast float* %44 to <4 x float>*
%51 = load <4 x float>* %47, align 16
%52 = load <4 x float>* %48, align 16
%53 = load <4 x float>* %49, align 16
%54 = load <4 x float>* %50, align 16
%55 = fmul <4 x float> %54, %51
%56 = fmul <4 x float> %53, %52
%57 = fadd <4 x float> %56, %55
%58 = bitcast float* %46 to <4 x float>*
%59 = fmul <4 x float> %54, %52
%60 = fmul <4 x float> %53, %51
%61 = fsub <4 x float> %60, %59
%62 = bitcast float* %45 to <4 x float>*
store <4 x float> %61, <4 x float>* %62, align 16
store <4 x float> %57, <4 x float>* %58, align 16
%63 = getelementptr float* %arg1, i64 12
%64 = getelementptr float* %arg1, i64 76
%65 = getelementptr float* %arg2, i64 12
%66 = getelementptr float* %arg2, i64 76
%67 = getelementptr float* %arg0, i64 12
%68 = getelementptr float* %arg0, i64 76
%69 = bitcast float* %63 to <4 x float>*
%70 = bitcast float* %64 to <4 x float>*
%71 = bitcast float* %65 to <4 x float>*
%72 = bitcast float* %66 to <4 x float>*
%73 = load <4 x float>* %69, align 16
%74 = load <4 x float>* %70, align 16
%75 = load <4 x float>* %71, align 16
%76 = load <4 x float>* %72, align 16
%77 = fmul <4 x float> %76, %73
%78 = fmul <4 x float> %75, %74
%79 = fadd <4 x float> %78, %77
%80 = bitcast float* %68 to <4 x float>*
%81 = fmul <4 x float> %76, %74
%82 = fmul <4 x float> %75, %73
%83 = fsub <4 x float> %82, %81
%84 = bitcast float* %67 to <4 x float>*
store <4 x float> %83, <4 x float>* %84, align 16
store <4 x float> %79, <4 x float>* %80, align 16
%85 = getelementptr float* %arg1, i64 16
%86 = getelementptr float* %arg1, i64 80
%87 = getelementptr float* %arg2, i64 16
%88 = getelementptr float* %arg2, i64 80
%89 = getelementptr float* %arg0, i64 16
%90 = getelementptr float* %arg0, i64 80
%91 = bitcast float* %85 to <4 x float>*
%92 = bitcast float* %86 to <4 x float>*
%93 = bitcast float* %87 to <4 x float>*
%94 = bitcast float* %88 to <4 x float>*
%95 = load <4 x float>* %91, align 16
%96 = shufflevector <4 x float> %95, <4 x float> undef, <2 x i32>
<i32 0, i32 1>
%97 = load <4 x float>* %92, align 16
%98 = shufflevector <4 x float> %97, <4 x float> undef, <2 x i32>
<i32 0, i32 1>
%99 = shufflevector <2 x float> %98, <2 x float> %96, <4 x i32> <i32
0, i32 1, i32 2, i32 3>
%100 = load <4 x float>* %93, align 16
%101 = shufflevector <4 x float> %100, <4 x float> undef, <2 x i32>
<i32 0, i32 1>
....
-------------- next part --------------
; ModuleID = 'module'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @main(i64 %lo, i64 %hi, float* noalias %arg0, float* noalias %arg1, float* noalias %arg2) {
entrypoint:
%0 = getelementptr float* %arg1, i32 0
%1 = load float* %0
%2 = getelementptr float* %arg1, i32 64
%3 = load float* %2
%4 = getelementptr float* %arg2, i32 0
%5 = load float* %4
%6 = getelementptr float* %arg2, i32 64
%7 = load float* %6
%8 = fmul float %7, %1
%9 = fmul float %5, %3
%10 = fadd float %9, %8
%11 = fmul float %7, %3
%12 = fmul float %5, %1
%13 = fsub float %12, %11
%14 = getelementptr float* %arg0, i32 0
store float %13, float* %14
%15 = getelementptr float* %arg0, i32 64
store float %10, float* %15
%16 = getelementptr float* %arg1, i32 1
%17 = load float* %16
%18 = getelementptr float* %arg1, i32 65
%19 = load float* %18
%20 = getelementptr float* %arg2, i32 1
%21 = load float* %20
%22 = getelementptr float* %arg2, i32 65
%23 = load float* %22
%24 = fmul float %23, %17
%25 = fmul float %21, %19
%26 = fadd float %25, %24
%27 = fmul float %23, %19
%28 = fmul float %21, %17
%29 = fsub float %28, %27
%30 = getelementptr float* %arg0, i32 1
store float %29, float* %30
%31 = getelementptr float* %arg0, i32 65
store float %26, float* %31
%32 = getelementptr float* %arg1, i32 2
%33 = load float* %32
%34 = getelementptr float* %arg1, i32 66
%35 = load float* %34
%36 = getelementptr float* %arg2, i32 2
%37 = load float* %36
%38 = getelementptr float* %arg2, i32 66
%39 = load float* %38
%40 = fmul float %39, %33
%41 = fmul float %37, %35
%42 = fadd float %41, %40
%43 = fmul float %39, %35
%44 = fmul float %37, %33
%45 = fsub float %44, %43
%46 = getelementptr float* %arg0, i32 2
store float %45, float* %46
%47 = getelementptr float* %arg0, i32 66
store float %42, float* %47
%48 = getelementptr float* %arg1, i32 3
%49 = load float* %48
%50 = getelementptr float* %arg1, i32 67
%51 = load float* %50
%52 = getelementptr float* %arg2, i32 3
%53 = load float* %52
%54 = getelementptr float* %arg2, i32 67
%55 = load float* %54
%56 = fmul float %55, %49
%57 = fmul float %53, %51
%58 = fadd float %57, %56
%59 = fmul float %55, %51
%60 = fmul float %53, %49
%61 = fsub float %60, %59
%62 = getelementptr float* %arg0, i32 3
store float %61, float* %62
%63 = getelementptr float* %arg0, i32 67
store float %58, float* %63
%64 = getelementptr float* %arg1, i32 4
%65 = load float* %64
%66 = getelementptr float* %arg1, i32 68
%67 = load float* %66
%68 = getelementptr float* %arg2, i32 4
%69 = load float* %68
%70 = getelementptr float* %arg2, i32 68
%71 = load float* %70
%72 = fmul float %71, %65
%73 = fmul float %69, %67
%74 = fadd float %73, %72
%75 = fmul float %71, %67
%76 = fmul float %69, %65
%77 = fsub float %76, %75
%78 = getelementptr float* %arg0, i32 4
store float %77, float* %78
%79 = getelementptr float* %arg0, i32 68
store float %74, float* %79
%80 = getelementptr float* %arg1, i32 5
%81 = load float* %80
%82 = getelementptr float* %arg1, i32 69
%83 = load float* %82
%84 = getelementptr float* %arg2, i32 5
%85 = load float* %84
%86 = getelementptr float* %arg2, i32 69
%87 = load float* %86
%88 = fmul float %87, %81
%89 = fmul float %85, %83
%90 = fadd float %89, %88
%91 = fmul float %87, %83
%92 = fmul float %85, %81
%93 = fsub float %92, %91
%94 = getelementptr float* %arg0, i32 5
store float %93, float* %94
%95 = getelementptr float* %arg0, i32 69
store float %90, float* %95
%96 = getelementptr float* %arg1, i32 6
%97 = load float* %96
%98 = getelementptr float* %arg1, i32 70
%99 = load float* %98
%100 = getelementptr float* %arg2, i32 6
%101 = load float* %100
%102 = getelementptr float* %arg2, i32 70
%103 = load float* %102
%104 = fmul float %103, %97
%105 = fmul float %101, %99
%106 = fadd float %105, %104
%107 = fmul float %103, %99
%108 = fmul float %101, %97
%109 = fsub float %108, %107
%110 = getelementptr float* %arg0, i32 6
store float %109, float* %110
%111 = getelementptr float* %arg0, i32 70
store float %106, float* %111
%112 = getelementptr float* %arg1, i32 7
%113 = load float* %112
%114 = getelementptr float* %arg1, i32 71
%115 = load float* %114
%116 = getelementptr float* %arg2, i32 7
%117 = load float* %116
%118 = getelementptr float* %arg2, i32 71
%119 = load float* %118
%120 = fmul float %119, %113
%121 = fmul float %117, %115
%122 = fadd float %121, %120
%123 = fmul float %119, %115
%124 = fmul float %117, %113
%125 = fsub float %124, %123
%126 = getelementptr float* %arg0, i32 7
store float %125, float* %126
%127 = getelementptr float* %arg0, i32 71
store float %122, float* %127
%128 = getelementptr float* %arg1, i32 8
%129 = load float* %128
%130 = getelementptr float* %arg1, i32 72
%131 = load float* %130
%132 = getelementptr float* %arg2, i32 8
%133 = load float* %132
%134 = getelementptr float* %arg2, i32 72
%135 = load float* %134
%136 = fmul float %135, %129
%137 = fmul float %133, %131
%138 = fadd float %137, %136
%139 = fmul float %135, %131
%140 = fmul float %133, %129
%141 = fsub float %140, %139
%142 = getelementptr float* %arg0, i32 8
store float %141, float* %142
%143 = getelementptr float* %arg0, i32 72
store float %138, float* %143
%144 = getelementptr float* %arg1, i32 9
%145 = load float* %144
%146 = getelementptr float* %arg1, i32 73
%147 = load float* %146
%148 = getelementptr float* %arg2, i32 9
%149 = load float* %148
%150 = getelementptr float* %arg2, i32 73
%151 = load float* %150
%152 = fmul float %151, %145
%153 = fmul float %149, %147
%154 = fadd float %153, %152
%155 = fmul float %151, %147
%156 = fmul float %149, %145
%157 = fsub float %156, %155
%158 = getelementptr float* %arg0, i32 9
store float %157, float* %158
%159 = getelementptr float* %arg0, i32 73
store float %154, float* %159
%160 = getelementptr float* %arg1, i32 10
%161 = load float* %160
%162 = getelementptr float* %arg1, i32 74
%163 = load float* %162
%164 = getelementptr float* %arg2, i32 10
%165 = load float* %164
%166 = getelementptr float* %arg2, i32 74
%167 = load float* %166
%168 = fmul float %167, %161
%169 = fmul float %165, %163
%170 = fadd float %169, %168
%171 = fmul float %167, %163
%172 = fmul float %165, %161
%173 = fsub float %172, %171
%174 = getelementptr float* %arg0, i32 10
store float %173, float* %174
%175 = getelementptr float* %arg0, i32 74
store float %170, float* %175
%176 = getelementptr float* %arg1, i32 11
%177 = load float* %176
%178 = getelementptr float* %arg1, i32 75
%179 = load float* %178
%180 = getelementptr float* %arg2, i32 11
%181 = load float* %180
%182 = getelementptr float* %arg2, i32 75
%183 = load float* %182
%184 = fmul float %183, %177
%185 = fmul float %181, %179
%186 = fadd float %185, %184
%187 = fmul float %183, %179
%188 = fmul float %181, %177
%189 = fsub float %188, %187
%190 = getelementptr float* %arg0, i32 11
store float %189, float* %190
%191 = getelementptr float* %arg0, i32 75
store float %186, float* %191
%192 = getelementptr float* %arg1, i32 12
%193 = load float* %192
%194 = getelementptr float* %arg1, i32 76
%195 = load float* %194
%196 = getelementptr float* %arg2, i32 12
%197 = load float* %196
%198 = getelementptr float* %arg2, i32 76
%199 = load float* %198
%200 = fmul float %199, %193
%201 = fmul float %197, %195
%202 = fadd float %201, %200
%203 = fmul float %199, %195
%204 = fmul float %197, %193
%205 = fsub float %204, %203
%206 = getelementptr float* %arg0, i32 12
store float %205, float* %206
%207 = getelementptr float* %arg0, i32 76
store float %202, float* %207
%208 = getelementptr float* %arg1, i32 13
%209 = load float* %208
%210 = getelementptr float* %arg1, i32 77
%211 = load float* %210
%212 = getelementptr float* %arg2, i32 13
%213 = load float* %212
%214 = getelementptr float* %arg2, i32 77
%215 = load float* %214
%216 = fmul float %215, %209
%217 = fmul float %213, %211
%218 = fadd float %217, %216
%219 = fmul float %215, %211
%220 = fmul float %213, %209
%221 = fsub float %220, %219
%222 = getelementptr float* %arg0, i32 13
store float %221, float* %222
%223 = getelementptr float* %arg0, i32 77
store float %218, float* %223
%224 = getelementptr float* %arg1, i32 14
%225 = load float* %224
%226 = getelementptr float* %arg1, i32 78
%227 = load float* %226
%228 = getelementptr float* %arg2, i32 14
%229 = load float* %228
%230 = getelementptr float* %arg2, i32 78
%231 = load float* %230
%232 = fmul float %231, %225
%233 = fmul float %229, %227
%234 = fadd float %233, %232
%235 = fmul float %231, %227
%236 = fmul float %229, %225
%237 = fsub float %236, %235
%238 = getelementptr float* %arg0, i32 14
store float %237, float* %238
%239 = getelementptr float* %arg0, i32 78
store float %234, float* %239
%240 = getelementptr float* %arg1, i32 15
%241 = load float* %240
%242 = getelementptr float* %arg1, i32 79
%243 = load float* %242
%244 = getelementptr float* %arg2, i32 15
%245 = load float* %244
%246 = getelementptr float* %arg2, i32 79
%247 = load float* %246
%248 = fmul float %247, %241
%249 = fmul float %245, %243
%250 = fadd float %249, %248
%251 = fmul float %247, %243
%252 = fmul float %245, %241
%253 = fsub float %252, %251
%254 = getelementptr float* %arg0, i32 15
store float %253, float* %254
%255 = getelementptr float* %arg0, i32 79
store float %250, float* %255
%256 = getelementptr float* %arg1, i32 16
%257 = load float* %256
%258 = getelementptr float* %arg1, i32 80
%259 = load float* %258
%260 = getelementptr float* %arg2, i32 16
%261 = load float* %260
%262 = getelementptr float* %arg2, i32 80
%263 = load float* %262
%264 = fmul float %263, %257
%265 = fmul float %261, %259
%266 = fadd float %265, %264
%267 = fmul float %263, %259
%268 = fmul float %261, %257
%269 = fsub float %268, %267
%270 = getelementptr float* %arg0, i32 16
store float %269, float* %270
%271 = getelementptr float* %arg0, i32 80
store float %266, float* %271
%272 = getelementptr float* %arg1, i32 17
%273 = load float* %272
%274 = getelementptr float* %arg1, i32 81
%275 = load float* %274
%276 = getelementptr float* %arg2, i32 17
%277 = load float* %276
%278 = getelementptr float* %arg2, i32 81
%279 = load float* %278
%280 = fmul float %279, %273
%281 = fmul float %277, %275
%282 = fadd float %281, %280
%283 = fmul float %279, %275
%284 = fmul float %277, %273
%285 = fsub float %284, %283
%286 = getelementptr float* %arg0, i32 17
store float %285, float* %286
%287 = getelementptr float* %arg0, i32 81
store float %282, float* %287
%288 = getelementptr float* %arg1, i32 18
%289 = load float* %288
%290 = getelementptr float* %arg1, i32 82
%291 = load float* %290
%292 = getelementptr float* %arg2, i32 18
%293 = load float* %292
%294 = getelementptr float* %arg2, i32 82
%295 = load float* %294
%296 = fmul float %295, %289
%297 = fmul float %293, %291
%298 = fadd float %297, %296
%299 = fmul float %295, %291
%300 = fmul float %293, %289
%301 = fsub float %300, %299
%302 = getelementptr float* %arg0, i32 18
store float %301, float* %302
%303 = getelementptr float* %arg0, i32 82
store float %298, float* %303
%304 = getelementptr float* %arg1, i32 19
%305 = load float* %304
%306 = getelementptr float* %arg1, i32 83
%307 = load float* %306
%308 = getelementptr float* %arg2, i32 19
%309 = load float* %308
%310 = getelementptr float* %arg2, i32 83
%311 = load float* %310
%312 = fmul float %311, %305
%313 = fmul float %309, %307
%314 = fadd float %313, %312
%315 = fmul float %311, %307
%316 = fmul float %309, %305
%317 = fsub float %316, %315
%318 = getelementptr float* %arg0, i32 19
store float %317, float* %318
%319 = getelementptr float* %arg0, i32 83
store float %314, float* %319
%320 = getelementptr float* %arg1, i32 20
%321 = load float* %320
%322 = getelementptr float* %arg1, i32 84
%323 = load float* %322
%324 = getelementptr float* %arg2, i32 20
%325 = load float* %324
%326 = getelementptr float* %arg2, i32 84
%327 = load float* %326
%328 = fmul float %327, %321
%329 = fmul float %325, %323
%330 = fadd float %329, %328
%331 = fmul float %327, %323
%332 = fmul float %325, %321
%333 = fsub float %332, %331
%334 = getelementptr float* %arg0, i32 20
store float %333, float* %334
%335 = getelementptr float* %arg0, i32 84
store float %330, float* %335
%336 = getelementptr float* %arg1, i32 21
%337 = load float* %336
%338 = getelementptr float* %arg1, i32 85
%339 = load float* %338
%340 = getelementptr float* %arg2, i32 21
%341 = load float* %340
%342 = getelementptr float* %arg2, i32 85
%343 = load float* %342
%344 = fmul float %343, %337
%345 = fmul float %341, %339
%346 = fadd float %345, %344
%347 = fmul float %343, %339
%348 = fmul float %341, %337
%349 = fsub float %348, %347
%350 = getelementptr float* %arg0, i32 21
store float %349, float* %350
%351 = getelementptr float* %arg0, i32 85
store float %346, float* %351
%352 = getelementptr float* %arg1, i32 22
%353 = load float* %352
%354 = getelementptr float* %arg1, i32 86
%355 = load float* %354
%356 = getelementptr float* %arg2, i32 22
%357 = load float* %356
%358 = getelementptr float* %arg2, i32 86
%359 = load float* %358
%360 = fmul float %359, %353
%361 = fmul float %357, %355
%362 = fadd float %361, %360
%363 = fmul float %359, %355
%364 = fmul float %357, %353
%365 = fsub float %364, %363
%366 = getelementptr float* %arg0, i32 22
store float %365, float* %366
%367 = getelementptr float* %arg0, i32 86
store float %362, float* %367
%368 = getelementptr float* %arg1, i32 23
%369 = load float* %368
%370 = getelementptr float* %arg1, i32 87
%371 = load float* %370
%372 = getelementptr float* %arg2, i32 23
%373 = load float* %372
%374 = getelementptr float* %arg2, i32 87
%375 = load float* %374
%376 = fmul float %375, %369
%377 = fmul float %373, %371
%378 = fadd float %377, %376
%379 = fmul float %375, %371
%380 = fmul float %373, %369
%381 = fsub float %380, %379
%382 = getelementptr float* %arg0, i32 23
store float %381, float* %382
%383 = getelementptr float* %arg0, i32 87
store float %378, float* %383
%384 = getelementptr float* %arg1, i32 24
%385 = load float* %384
%386 = getelementptr float* %arg1, i32 88
%387 = load float* %386
%388 = getelementptr float* %arg2, i32 24
%389 = load float* %388
%390 = getelementptr float* %arg2, i32 88
%391 = load float* %390
%392 = fmul float %391, %385
%393 = fmul float %389, %387
%394 = fadd float %393, %392
%395 = fmul float %391, %387
%396 = fmul float %389, %385
%397 = fsub float %396, %395
%398 = getelementptr float* %arg0, i32 24
store float %397, float* %398
%399 = getelementptr float* %arg0, i32 88
store float %394, float* %399
%400 = getelementptr float* %arg1, i32 25
%401 = load float* %400
%402 = getelementptr float* %arg1, i32 89
%403 = load float* %402
%404 = getelementptr float* %arg2, i32 25
%405 = load float* %404
%406 = getelementptr float* %arg2, i32 89
%407 = load float* %406
%408 = fmul float %407, %401
%409 = fmul float %405, %403
%410 = fadd float %409, %408
%411 = fmul float %407, %403
%412 = fmul float %405, %401
%413 = fsub float %412, %411
%414 = getelementptr float* %arg0, i32 25
store float %413, float* %414
%415 = getelementptr float* %arg0, i32 89
store float %410, float* %415
%416 = getelementptr float* %arg1, i32 26
%417 = load float* %416
%418 = getelementptr float* %arg1, i32 90
%419 = load float* %418
%420 = getelementptr float* %arg2, i32 26
%421 = load float* %420
%422 = getelementptr float* %arg2, i32 90
%423 = load float* %422
%424 = fmul float %423, %417
%425 = fmul float %421, %419
%426 = fadd float %425, %424
%427 = fmul float %423, %419
%428 = fmul float %421, %417
%429 = fsub float %428, %427
%430 = getelementptr float* %arg0, i32 26
store float %429, float* %430
%431 = getelementptr float* %arg0, i32 90
store float %426, float* %431
%432 = getelementptr float* %arg1, i32 27
%433 = load float* %432
%434 = getelementptr float* %arg1, i32 91
%435 = load float* %434
%436 = getelementptr float* %arg2, i32 27
%437 = load float* %436
%438 = getelementptr float* %arg2, i32 91
%439 = load float* %438
%440 = fmul float %439, %433
%441 = fmul float %437, %435
%442 = fadd float %441, %440
%443 = fmul float %439, %435
%444 = fmul float %437, %433
%445 = fsub float %444, %443
%446 = getelementptr float* %arg0, i32 27
store float %445, float* %446
%447 = getelementptr float* %arg0, i32 91
store float %442, float* %447
%448 = getelementptr float* %arg1, i32 28
%449 = load float* %448
%450 = getelementptr float* %arg1, i32 92
%451 = load float* %450
%452 = getelementptr float* %arg2, i32 28
%453 = load float* %452
%454 = getelementptr float* %arg2, i32 92
%455 = load float* %454
%456 = fmul float %455, %449
%457 = fmul float %453, %451
%458 = fadd float %457, %456
%459 = fmul float %455, %451
%460 = fmul float %453, %449
%461 = fsub float %460, %459
%462 = getelementptr float* %arg0, i32 28
store float %461, float* %462
%463 = getelementptr float* %arg0, i32 92
store float %458, float* %463
%464 = getelementptr float* %arg1, i32 29
%465 = load float* %464
%466 = getelementptr float* %arg1, i32 93
%467 = load float* %466
%468 = getelementptr float* %arg2, i32 29
%469 = load float* %468
%470 = getelementptr float* %arg2, i32 93
%471 = load float* %470
%472 = fmul float %471, %465
%473 = fmul float %469, %467
%474 = fadd float %473, %472
%475 = fmul float %471, %467
%476 = fmul float %469, %465
%477 = fsub float %476, %475
%478 = getelementptr float* %arg0, i32 29
store float %477, float* %478
%479 = getelementptr float* %arg0, i32 93
store float %474, float* %479
%480 = getelementptr float* %arg1, i32 30
%481 = load float* %480
%482 = getelementptr float* %arg1, i32 94
%483 = load float* %482
%484 = getelementptr float* %arg2, i32 30
%485 = load float* %484
%486 = getelementptr float* %arg2, i32 94
%487 = load float* %486
%488 = fmul float %487, %481
%489 = fmul float %485, %483
%490 = fadd float %489, %488
%491 = fmul float %487, %483
%492 = fmul float %485, %481
%493 = fsub float %492, %491
%494 = getelementptr float* %arg0, i32 30
store float %493, float* %494
%495 = getelementptr float* %arg0, i32 94
store float %490, float* %495
%496 = getelementptr float* %arg1, i32 31
%497 = load float* %496
%498 = getelementptr float* %arg1, i32 95
%499 = load float* %498
%500 = getelementptr float* %arg2, i32 31
%501 = load float* %500
%502 = getelementptr float* %arg2, i32 95
%503 = load float* %502
%504 = fmul float %503, %497
%505 = fmul float %501, %499
%506 = fadd float %505, %504
%507 = fmul float %503, %499
%508 = fmul float %501, %497
%509 = fsub float %508, %507
%510 = getelementptr float* %arg0, i32 31
store float %509, float* %510
%511 = getelementptr float* %arg0, i32 95
store float %506, float* %511
%512 = getelementptr float* %arg1, i32 32
%513 = load float* %512
%514 = getelementptr float* %arg1, i32 96
%515 = load float* %514
%516 = getelementptr float* %arg2, i32 32
%517 = load float* %516
%518 = getelementptr float* %arg2, i32 96
%519 = load float* %518
%520 = fmul float %519, %513
%521 = fmul float %517, %515
%522 = fadd float %521, %520
%523 = fmul float %519, %515
%524 = fmul float %517, %513
%525 = fsub float %524, %523
%526 = getelementptr float* %arg0, i32 32
store float %525, float* %526
%527 = getelementptr float* %arg0, i32 96
store float %522, float* %527
%528 = getelementptr float* %arg1, i32 33
%529 = load float* %528
%530 = getelementptr float* %arg1, i32 97
%531 = load float* %530
%532 = getelementptr float* %arg2, i32 33
%533 = load float* %532
%534 = getelementptr float* %arg2, i32 97
%535 = load float* %534
%536 = fmul float %535, %529
%537 = fmul float %533, %531
%538 = fadd float %537, %536
%539 = fmul float %535, %531
%540 = fmul float %533, %529
%541 = fsub float %540, %539
%542 = getelementptr float* %arg0, i32 33
store float %541, float* %542
%543 = getelementptr float* %arg0, i32 97
store float %538, float* %543
%544 = getelementptr float* %arg1, i32 34
%545 = load float* %544
%546 = getelementptr float* %arg1, i32 98
%547 = load float* %546
%548 = getelementptr float* %arg2, i32 34
%549 = load float* %548
%550 = getelementptr float* %arg2, i32 98
%551 = load float* %550
%552 = fmul float %551, %545
%553 = fmul float %549, %547
%554 = fadd float %553, %552
%555 = fmul float %551, %547
%556 = fmul float %549, %545
%557 = fsub float %556, %555
%558 = getelementptr float* %arg0, i32 34
store float %557, float* %558
%559 = getelementptr float* %arg0, i32 98
store float %554, float* %559
%560 = getelementptr float* %arg1, i32 35
%561 = load float* %560
%562 = getelementptr float* %arg1, i32 99
%563 = load float* %562
%564 = getelementptr float* %arg2, i32 35
%565 = load float* %564
%566 = getelementptr float* %arg2, i32 99
%567 = load float* %566
%568 = fmul float %567, %561
%569 = fmul float %565, %563
%570 = fadd float %569, %568
%571 = fmul float %567, %563
%572 = fmul float %565, %561
%573 = fsub float %572, %571
%574 = getelementptr float* %arg0, i32 35
store float %573, float* %574
%575 = getelementptr float* %arg0, i32 99
store float %570, float* %575
%576 = getelementptr float* %arg1, i32 36
%577 = load float* %576
%578 = getelementptr float* %arg1, i32 100
%579 = load float* %578
%580 = getelementptr float* %arg2, i32 36
%581 = load float* %580
%582 = getelementptr float* %arg2, i32 100
%583 = load float* %582
%584 = fmul float %583, %577
%585 = fmul float %581, %579
%586 = fadd float %585, %584
%587 = fmul float %583, %579
%588 = fmul float %581, %577
%589 = fsub float %588, %587
%590 = getelementptr float* %arg0, i32 36
store float %589, float* %590
%591 = getelementptr float* %arg0, i32 100
store float %586, float* %591
%592 = getelementptr float* %arg1, i32 37
%593 = load float* %592
%594 = getelementptr float* %arg1, i32 101
%595 = load float* %594
%596 = getelementptr float* %arg2, i32 37
%597 = load float* %596
%598 = getelementptr float* %arg2, i32 101
%599 = load float* %598
%600 = fmul float %599, %593
%601 = fmul float %597, %595
%602 = fadd float %601, %600
%603 = fmul float %599, %595
%604 = fmul float %597, %593
%605 = fsub float %604, %603
%606 = getelementptr float* %arg0, i32 37
store float %605, float* %606
%607 = getelementptr float* %arg0, i32 101
store float %602, float* %607
%608 = getelementptr float* %arg1, i32 38
%609 = load float* %608
%610 = getelementptr float* %arg1, i32 102
%611 = load float* %610
%612 = getelementptr float* %arg2, i32 38
%613 = load float* %612
%614 = getelementptr float* %arg2, i32 102
%615 = load float* %614
%616 = fmul float %615, %609
%617 = fmul float %613, %611
%618 = fadd float %617, %616
%619 = fmul float %615, %611
%620 = fmul float %613, %609
%621 = fsub float %620, %619
%622 = getelementptr float* %arg0, i32 38
store float %621, float* %622
%623 = getelementptr float* %arg0, i32 102
store float %618, float* %623
%624 = getelementptr float* %arg1, i32 39
%625 = load float* %624
%626 = getelementptr float* %arg1, i32 103
%627 = load float* %626
%628 = getelementptr float* %arg2, i32 39
%629 = load float* %628
%630 = getelementptr float* %arg2, i32 103
%631 = load float* %630
%632 = fmul float %631, %625
%633 = fmul float %629, %627
%634 = fadd float %633, %632
%635 = fmul float %631, %627
%636 = fmul float %629, %625
%637 = fsub float %636, %635
%638 = getelementptr float* %arg0, i32 39
store float %637, float* %638
%639 = getelementptr float* %arg0, i32 103
store float %634, float* %639
%640 = getelementptr float* %arg1, i32 40
%641 = load float* %640
%642 = getelementptr float* %arg1, i32 104
%643 = load float* %642
%644 = getelementptr float* %arg2, i32 40
%645 = load float* %644
%646 = getelementptr float* %arg2, i32 104
%647 = load float* %646
%648 = fmul float %647, %641
%649 = fmul float %645, %643
%650 = fadd float %649, %648
%651 = fmul float %647, %643
%652 = fmul float %645, %641
%653 = fsub float %652, %651
%654 = getelementptr float* %arg0, i32 40
store float %653, float* %654
%655 = getelementptr float* %arg0, i32 104
store float %650, float* %655
%656 = getelementptr float* %arg1, i32 41
%657 = load float* %656
%658 = getelementptr float* %arg1, i32 105
%659 = load float* %658
%660 = getelementptr float* %arg2, i32 41
%661 = load float* %660
%662 = getelementptr float* %arg2, i32 105
%663 = load float* %662
%664 = fmul float %663, %657
%665 = fmul float %661, %659
%666 = fadd float %665, %664
%667 = fmul float %663, %659
%668 = fmul float %661, %657
%669 = fsub float %668, %667
%670 = getelementptr float* %arg0, i32 41
store float %669, float* %670
%671 = getelementptr float* %arg0, i32 105
store float %666, float* %671
%672 = getelementptr float* %arg1, i32 42
%673 = load float* %672
%674 = getelementptr float* %arg1, i32 106
%675 = load float* %674
%676 = getelementptr float* %arg2, i32 42
%677 = load float* %676
%678 = getelementptr float* %arg2, i32 106
%679 = load float* %678
%680 = fmul float %679, %673
%681 = fmul float %677, %675
%682 = fadd float %681, %680
%683 = fmul float %679, %675
%684 = fmul float %677, %673
%685 = fsub float %684, %683
%686 = getelementptr float* %arg0, i32 42
store float %685, float* %686
%687 = getelementptr float* %arg0, i32 106
store float %682, float* %687
%688 = getelementptr float* %arg1, i32 43
%689 = load float* %688
%690 = getelementptr float* %arg1, i32 107
%691 = load float* %690
%692 = getelementptr float* %arg2, i32 43
%693 = load float* %692
%694 = getelementptr float* %arg2, i32 107
%695 = load float* %694
%696 = fmul float %695, %689
%697 = fmul float %693, %691
%698 = fadd float %697, %696
%699 = fmul float %695, %691
%700 = fmul float %693, %689
%701 = fsub float %700, %699
%702 = getelementptr float* %arg0, i32 43
store float %701, float* %702
%703 = getelementptr float* %arg0, i32 107
store float %698, float* %703
%704 = getelementptr float* %arg1, i32 44
%705 = load float* %704
%706 = getelementptr float* %arg1, i32 108
%707 = load float* %706
%708 = getelementptr float* %arg2, i32 44
%709 = load float* %708
%710 = getelementptr float* %arg2, i32 108
%711 = load float* %710
%712 = fmul float %711, %705
%713 = fmul float %709, %707
%714 = fadd float %713, %712
%715 = fmul float %711, %707
%716 = fmul float %709, %705
%717 = fsub float %716, %715
%718 = getelementptr float* %arg0, i32 44
store float %717, float* %718
%719 = getelementptr float* %arg0, i32 108
store float %714, float* %719
%720 = getelementptr float* %arg1, i32 45
%721 = load float* %720
%722 = getelementptr float* %arg1, i32 109
%723 = load float* %722
%724 = getelementptr float* %arg2, i32 45
%725 = load float* %724
%726 = getelementptr float* %arg2, i32 109
%727 = load float* %726
%728 = fmul float %727, %721
%729 = fmul float %725, %723
%730 = fadd float %729, %728
%731 = fmul float %727, %723
%732 = fmul float %725, %721
%733 = fsub float %732, %731
%734 = getelementptr float* %arg0, i32 45
store float %733, float* %734
%735 = getelementptr float* %arg0, i32 109
store float %730, float* %735
%736 = getelementptr float* %arg1, i32 46
%737 = load float* %736
%738 = getelementptr float* %arg1, i32 110
%739 = load float* %738
%740 = getelementptr float* %arg2, i32 46
%741 = load float* %740
%742 = getelementptr float* %arg2, i32 110
%743 = load float* %742
%744 = fmul float %743, %737
%745 = fmul float %741, %739
%746 = fadd float %745, %744
%747 = fmul float %743, %739
%748 = fmul float %741, %737
%749 = fsub float %748, %747
%750 = getelementptr float* %arg0, i32 46
store float %749, float* %750
%751 = getelementptr float* %arg0, i32 110
store float %746, float* %751
%752 = getelementptr float* %arg1, i32 47
%753 = load float* %752
%754 = getelementptr float* %arg1, i32 111
%755 = load float* %754
%756 = getelementptr float* %arg2, i32 47
%757 = load float* %756
%758 = getelementptr float* %arg2, i32 111
%759 = load float* %758
%760 = fmul float %759, %753
%761 = fmul float %757, %755
%762 = fadd float %761, %760
%763 = fmul float %759, %755
%764 = fmul float %757, %753
%765 = fsub float %764, %763
%766 = getelementptr float* %arg0, i32 47
store float %765, float* %766
%767 = getelementptr float* %arg0, i32 111
store float %762, float* %767
%768 = getelementptr float* %arg1, i32 48
%769 = load float* %768
%770 = getelementptr float* %arg1, i32 112
%771 = load float* %770
%772 = getelementptr float* %arg2, i32 48
%773 = load float* %772
%774 = getelementptr float* %arg2, i32 112
%775 = load float* %774
%776 = fmul float %775, %769
%777 = fmul float %773, %771
%778 = fadd float %777, %776
%779 = fmul float %775, %771
%780 = fmul float %773, %769
%781 = fsub float %780, %779
%782 = getelementptr float* %arg0, i32 48
store float %781, float* %782
%783 = getelementptr float* %arg0, i32 112
store float %778, float* %783
%784 = getelementptr float* %arg1, i32 49
%785 = load float* %784
%786 = getelementptr float* %arg1, i32 113
%787 = load float* %786
%788 = getelementptr float* %arg2, i32 49
%789 = load float* %788
%790 = getelementptr float* %arg2, i32 113
%791 = load float* %790
%792 = fmul float %791, %785
%793 = fmul float %789, %787
%794 = fadd float %793, %792
%795 = fmul float %791, %787
%796 = fmul float %789, %785
%797 = fsub float %796, %795
%798 = getelementptr float* %arg0, i32 49
store float %797, float* %798
%799 = getelementptr float* %arg0, i32 113
store float %794, float* %799
%800 = getelementptr float* %arg1, i32 50
%801 = load float* %800
%802 = getelementptr float* %arg1, i32 114
%803 = load float* %802
%804 = getelementptr float* %arg2, i32 50
%805 = load float* %804
%806 = getelementptr float* %arg2, i32 114
%807 = load float* %806
%808 = fmul float %807, %801
%809 = fmul float %805, %803
%810 = fadd float %809, %808
%811 = fmul float %807, %803
%812 = fmul float %805, %801
%813 = fsub float %812, %811
%814 = getelementptr float* %arg0, i32 50
store float %813, float* %814
%815 = getelementptr float* %arg0, i32 114
store float %810, float* %815
%816 = getelementptr float* %arg1, i32 51
%817 = load float* %816
%818 = getelementptr float* %arg1, i32 115
%819 = load float* %818
%820 = getelementptr float* %arg2, i32 51
%821 = load float* %820
%822 = getelementptr float* %arg2, i32 115
%823 = load float* %822
%824 = fmul float %823, %817
%825 = fmul float %821, %819
%826 = fadd float %825, %824
%827 = fmul float %823, %819
%828 = fmul float %821, %817
%829 = fsub float %828, %827
%830 = getelementptr float* %arg0, i32 51
store float %829, float* %830
%831 = getelementptr float* %arg0, i32 115
store float %826, float* %831
%832 = getelementptr float* %arg1, i32 52
%833 = load float* %832
%834 = getelementptr float* %arg1, i32 116
%835 = load float* %834
%836 = getelementptr float* %arg2, i32 52
%837 = load float* %836
%838 = getelementptr float* %arg2, i32 116
%839 = load float* %838
%840 = fmul float %839, %833
%841 = fmul float %837, %835
%842 = fadd float %841, %840
%843 = fmul float %839, %835
%844 = fmul float %837, %833
%845 = fsub float %844, %843
%846 = getelementptr float* %arg0, i32 52
store float %845, float* %846
%847 = getelementptr float* %arg0, i32 116
store float %842, float* %847
%848 = getelementptr float* %arg1, i32 53
%849 = load float* %848
%850 = getelementptr float* %arg1, i32 117
%851 = load float* %850
%852 = getelementptr float* %arg2, i32 53
%853 = load float* %852
%854 = getelementptr float* %arg2, i32 117
%855 = load float* %854
%856 = fmul float %855, %849
%857 = fmul float %853, %851
%858 = fadd float %857, %856
%859 = fmul float %855, %851
%860 = fmul float %853, %849
%861 = fsub float %860, %859
%862 = getelementptr float* %arg0, i32 53
store float %861, float* %862
%863 = getelementptr float* %arg0, i32 117
store float %858, float* %863
%864 = getelementptr float* %arg1, i32 54
%865 = load float* %864
%866 = getelementptr float* %arg1, i32 118
%867 = load float* %866
%868 = getelementptr float* %arg2, i32 54
%869 = load float* %868
%870 = getelementptr float* %arg2, i32 118
%871 = load float* %870
%872 = fmul float %871, %865
%873 = fmul float %869, %867
%874 = fadd float %873, %872
%875 = fmul float %871, %867
%876 = fmul float %869, %865
%877 = fsub float %876, %875
%878 = getelementptr float* %arg0, i32 54
store float %877, float* %878
%879 = getelementptr float* %arg0, i32 118
store float %874, float* %879
%880 = getelementptr float* %arg1, i32 55
%881 = load float* %880
%882 = getelementptr float* %arg1, i32 119
%883 = load float* %882
%884 = getelementptr float* %arg2, i32 55
%885 = load float* %884
%886 = getelementptr float* %arg2, i32 119
%887 = load float* %886
%888 = fmul float %887, %881
%889 = fmul float %885, %883
%890 = fadd float %889, %888
%891 = fmul float %887, %883
%892 = fmul float %885, %881
%893 = fsub float %892, %891
%894 = getelementptr float* %arg0, i32 55
store float %893, float* %894
%895 = getelementptr float* %arg0, i32 119
store float %890, float* %895
%896 = getelementptr float* %arg1, i32 56
%897 = load float* %896
%898 = getelementptr float* %arg1, i32 120
%899 = load float* %898
%900 = getelementptr float* %arg2, i32 56
%901 = load float* %900
%902 = getelementptr float* %arg2, i32 120
%903 = load float* %902
%904 = fmul float %903, %897
%905 = fmul float %901, %899
%906 = fadd float %905, %904
%907 = fmul float %903, %899
%908 = fmul float %901, %897
%909 = fsub float %908, %907
%910 = getelementptr float* %arg0, i32 56
store float %909, float* %910
%911 = getelementptr float* %arg0, i32 120
store float %906, float* %911
%912 = getelementptr float* %arg1, i32 57
%913 = load float* %912
%914 = getelementptr float* %arg1, i32 121
%915 = load float* %914
%916 = getelementptr float* %arg2, i32 57
%917 = load float* %916
%918 = getelementptr float* %arg2, i32 121
%919 = load float* %918
%920 = fmul float %919, %913
%921 = fmul float %917, %915
%922 = fadd float %921, %920
%923 = fmul float %919, %915
%924 = fmul float %917, %913
%925 = fsub float %924, %923
%926 = getelementptr float* %arg0, i32 57
store float %925, float* %926
%927 = getelementptr float* %arg0, i32 121
store float %922, float* %927
%928 = getelementptr float* %arg1, i32 58
%929 = load float* %928
%930 = getelementptr float* %arg1, i32 122
%931 = load float* %930
%932 = getelementptr float* %arg2, i32 58
%933 = load float* %932
%934 = getelementptr float* %arg2, i32 122
%935 = load float* %934
%936 = fmul float %935, %929
%937 = fmul float %933, %931
%938 = fadd float %937, %936
%939 = fmul float %935, %931
%940 = fmul float %933, %929
%941 = fsub float %940, %939
%942 = getelementptr float* %arg0, i32 58
store float %941, float* %942
%943 = getelementptr float* %arg0, i32 122
store float %938, float* %943
%944 = getelementptr float* %arg1, i32 59
%945 = load float* %944
%946 = getelementptr float* %arg1, i32 123
%947 = load float* %946
%948 = getelementptr float* %arg2, i32 59
%949 = load float* %948
%950 = getelementptr float* %arg2, i32 123
%951 = load float* %950
%952 = fmul float %951, %945
%953 = fmul float %949, %947
%954 = fadd float %953, %952
%955 = fmul float %951, %947
%956 = fmul float %949, %945
%957 = fsub float %956, %955
%958 = getelementptr float* %arg0, i32 59
store float %957, float* %958
%959 = getelementptr float* %arg0, i32 123
store float %954, float* %959
%960 = getelementptr float* %arg1, i32 60
%961 = load float* %960
%962 = getelementptr float* %arg1, i32 124
%963 = load float* %962
%964 = getelementptr float* %arg2, i32 60
%965 = load float* %964
%966 = getelementptr float* %arg2, i32 124
%967 = load float* %966
%968 = fmul float %967, %961
%969 = fmul float %965, %963
%970 = fadd float %969, %968
%971 = fmul float %967, %963
%972 = fmul float %965, %961
%973 = fsub float %972, %971
%974 = getelementptr float* %arg0, i32 60
store float %973, float* %974
%975 = getelementptr float* %arg0, i32 124
store float %970, float* %975
%976 = getelementptr float* %arg1, i32 61
%977 = load float* %976
%978 = getelementptr float* %arg1, i32 125
%979 = load float* %978
%980 = getelementptr float* %arg2, i32 61
%981 = load float* %980
%982 = getelementptr float* %arg2, i32 125
%983 = load float* %982
%984 = fmul float %983, %977
%985 = fmul float %981, %979
%986 = fadd float %985, %984
%987 = fmul float %983, %979
%988 = fmul float %981, %977
%989 = fsub float %988, %987
%990 = getelementptr float* %arg0, i32 61
store float %989, float* %990
%991 = getelementptr float* %arg0, i32 125
store float %986, float* %991
%992 = getelementptr float* %arg1, i32 62
%993 = load float* %992
%994 = getelementptr float* %arg1, i32 126
%995 = load float* %994
%996 = getelementptr float* %arg2, i32 62
%997 = load float* %996
%998 = getelementptr float* %arg2, i32 126
%999 = load float* %998
%1000 = fmul float %999, %993
%1001 = fmul float %997, %995
%1002 = fadd float %1001, %1000
%1003 = fmul float %999, %995
%1004 = fmul float %997, %993
%1005 = fsub float %1004, %1003
%1006 = getelementptr float* %arg0, i32 62
store float %1005, float* %1006
%1007 = getelementptr float* %arg0, i32 126
store float %1002, float* %1007
%1008 = getelementptr float* %arg1, i32 63
%1009 = load float* %1008
%1010 = getelementptr float* %arg1, i32 127
%1011 = load float* %1010
%1012 = getelementptr float* %arg2, i32 63
%1013 = load float* %1012
%1014 = getelementptr float* %arg2, i32 127
%1015 = load float* %1014
%1016 = fmul float %1015, %1009
%1017 = fmul float %1013, %1011
%1018 = fadd float %1017, %1016
%1019 = fmul float %1015, %1011
%1020 = fmul float %1013, %1009
%1021 = fsub float %1020, %1019
%1022 = getelementptr float* %arg0, i32 63
store float %1021, float* %1022
%1023 = getelementptr float* %arg0, i32 127
store float %1018, float* %1023
ret void
}
More information about the llvm-dev
mailing list