Skip to content

Instantly share code, notes, and snippets.

@d0k
Created March 20, 2023 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save d0k/a6541ebfd36ea75db36bf12ac6996ba1 to your computer and use it in GitHub Desktop.
Save d0k/a6541ebfd36ea75db36bf12ac6996ba1 to your computer and use it in GitHub Desktop.
; ModuleID = 'LLVMDialectModule'
source_filename = "LLVMDialectModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare double @atan2(double %0, double %1) local_unnamed_addr #0
; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double %0) #1
; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.copysign.f64(double %0, double %1) #1
; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.sqrt.f64(double %0) #1
; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.log.f64(double %0) #1
; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @__xla__main(ptr nocapture readonly %0) local_unnamed_addr #2 {
%2 = getelementptr ptr, ptr %0, i64 2
%3 = load ptr, ptr %2, align 8
%4 = load ptr, ptr %3, align 8
%5 = getelementptr ptr, ptr %0, i64 7
%6 = load ptr, ptr %5, align 8
%7 = load ptr, ptr %6, align 8
br label %8
8: ; preds = %1, %8
%9 = phi i64 [ 0, %1 ], [ %431, %8 ]
%10 = getelementptr { double, double }, ptr %4, i64 %9
%.unpack = load double, ptr %10, align 8
%.elt1 = getelementptr { double, double }, ptr %4, i64 %9, i32 1
%.unpack2 = load double, ptr %.elt1, align 8
%11 = tail call double @llvm.fabs.f64(double %.unpack)
%12 = tail call double @llvm.fabs.f64(double %.unpack2)
%13 = fmul double %.unpack, %.unpack
%14 = tail call double @llvm.fabs.f64(double %13)
%15 = fmul double %.unpack2, %.unpack2
%16 = tail call double @llvm.fabs.f64(double %15)
%17 = fsub double %13, %15
%18 = fmul double %.unpack, %.unpack2
%19 = tail call double @llvm.fabs.f64(double %18)
%20 = fadd double %18, %18
%21 = fcmp uno double %17, 0.000000e+00
%22 = fcmp uno double %20, 0.000000e+00
%23 = and i1 %21, %22
%24 = fcmp oeq double %11, 0x7FF0000000000000
%25 = fcmp oeq double %12, 0x7FF0000000000000
%26 = or i1 %24, %25
%27 = fcmp uno double %.unpack, 0.000000e+00
%28 = fcmp uno double %.unpack2, 0.000000e+00
%29 = select i1 %24, double 1.000000e+00, double 0.000000e+00
%30 = tail call double @llvm.copysign.f64(double %29, double %.unpack)
%31 = select i1 %26, double %30, double %.unpack
%32 = select i1 %25, double 1.000000e+00, double 0.000000e+00
%33 = tail call double @llvm.copysign.f64(double %32, double %.unpack2)
%34 = select i1 %26, double %33, double %.unpack2
%35 = and i1 %27, %26
%36 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %.unpack)
%37 = select i1 %35, double %36, double %.unpack
%38 = and i1 %28, %26
%39 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %.unpack2)
%40 = select i1 %38, double %39, double %.unpack2
%41 = fcmp uno double %31, 0.000000e+00
%42 = fcmp uno double %34, 0.000000e+00
%43 = tail call double @llvm.copysign.f64(double %29, double %37)
%44 = select i1 %26, double %43, double %37
%45 = tail call double @llvm.copysign.f64(double %32, double %40)
%46 = select i1 %26, double %45, double %40
%47 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %31)
%48 = select i1 %41, double %47, double %30
%49 = select i1 %26, double %48, double %.unpack
%50 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %34)
%51 = select i1 %42, double %50, double %33
%52 = select i1 %26, double %51, double %.unpack2
%53 = fcmp oeq double %14, 0x7FF0000000000000
%54 = fcmp oeq double %16, 0x7FF0000000000000
%55 = or i1 %53, %54
%56 = fcmp oeq double %19, 0x7FF0000000000000
%57 = or i1 %56, %55
%58 = xor i1 %26, true
%59 = and i1 %57, %58
%60 = and i1 %41, %59
%61 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %49)
%62 = select i1 %60, double %61, double %49
%63 = and i1 %59, %42
%64 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %52)
%65 = select i1 %63, double %64, double %52
%66 = and i1 %27, %59
%67 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %44)
%68 = select i1 %66, double %67, double %44
%69 = and i1 %28, %59
%70 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %46)
%71 = select i1 %69, double %70, double %46
%72 = or i1 %26, %57
%73 = and i1 %23, %72
%74 = fmul double %62, %68
%75 = fmul double %71, %65
%76 = fsub double %74, %75
%77 = fmul double %76, 0x7FF0000000000000
%78 = select i1 %73, double %77, double %17
%79 = fmul double %68, %65
%80 = fmul double %62, %71
%81 = fadd double %80, %79
%82 = fmul double %81, 0x7FF0000000000000
%83 = select i1 %73, double %82, double %20
%84 = fsub double 1.000000e+00, %78
%85 = fsub double 0.000000e+00, %83
%86 = tail call double @llvm.fabs.f64(double %84)
%87 = fmul double %84, %84
%88 = fmul double %85, %85
%89 = fadd double %87, %88
%90 = tail call double @llvm.sqrt.f64(double %89)
%91 = fadd double %86, %90
%92 = fmul double %91, 5.000000e-01
%93 = tail call double @llvm.sqrt.f64(double %92)
%94 = fcmp olt double %84, 0.000000e+00
%95 = fcmp olt double %85, 0.000000e+00
%96 = fadd double %93, %93
%97 = fdiv double %85, %96
%98 = fneg double %93
%99 = select i1 %95, double %98, double %93
%100 = select i1 %94, double %99, double %97
%101 = fadd double %100, %100
%102 = fdiv double %85, %101
%103 = select i1 %94, double %102, double %93
%104 = fcmp oeq double %84, 0.000000e+00
%105 = fcmp oeq double %85, 0.000000e+00
%106 = and i1 %104, %105
%.op = fadd double %103, 1.000000e+00
%107 = select i1 %106, double 1.000000e+00, double %.op
%.op3 = fadd double %100, 0.000000e+00
%108 = select i1 %106, double 0.000000e+00, double %.op3
%109 = tail call double @llvm.fabs.f64(double %107)
%110 = tail call double @llvm.fabs.f64(double %108)
%111 = fmul double %107, %107
%112 = tail call double @llvm.fabs.f64(double %111)
%113 = fmul double %108, %108
%114 = tail call double @llvm.fabs.f64(double %113)
%115 = fsub double %111, %113
%116 = fmul double %108, %107
%117 = tail call double @llvm.fabs.f64(double %116)
%118 = fadd double %116, %116
%119 = fcmp uno double %115, 0.000000e+00
%120 = fcmp uno double %118, 0.000000e+00
%121 = and i1 %119, %120
%122 = fcmp oeq double %109, 0x7FF0000000000000
%123 = fcmp oeq double %110, 0x7FF0000000000000
%124 = or i1 %123, %122
%125 = fcmp uno double %107, 0.000000e+00
%126 = fcmp uno double %108, 0.000000e+00
%127 = select i1 %122, double 1.000000e+00, double 0.000000e+00
%128 = tail call double @llvm.copysign.f64(double %127, double %107)
%129 = select i1 %124, double %128, double %107
%130 = select i1 %123, double 1.000000e+00, double 0.000000e+00
%131 = tail call double @llvm.copysign.f64(double %130, double %108)
%132 = select i1 %124, double %131, double %108
%133 = and i1 %125, %124
%134 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %107)
%135 = select i1 %133, double %134, double %107
%136 = and i1 %126, %124
%137 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %108)
%138 = select i1 %136, double %137, double %108
%139 = fcmp uno double %129, 0.000000e+00
%140 = fcmp uno double %132, 0.000000e+00
%141 = tail call double @llvm.copysign.f64(double %127, double %135)
%142 = select i1 %124, double %141, double %135
%143 = tail call double @llvm.copysign.f64(double %130, double %138)
%144 = select i1 %124, double %143, double %138
%145 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %129)
%146 = select i1 %139, double %145, double %128
%147 = select i1 %124, double %146, double %107
%148 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %132)
%149 = select i1 %140, double %148, double %131
%150 = select i1 %124, double %149, double %108
%151 = fcmp oeq double %112, 0x7FF0000000000000
%152 = fcmp oeq double %114, 0x7FF0000000000000
%153 = or i1 %152, %151
%154 = fcmp oeq double %117, 0x7FF0000000000000
%155 = or i1 %154, %153
%156 = xor i1 %124, true
%157 = and i1 %155, %156
%158 = and i1 %157, %139
%159 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %147)
%160 = select i1 %158, double %159, double %147
%161 = and i1 %140, %157
%162 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %150)
%163 = select i1 %161, double %162, double %150
%164 = and i1 %125, %157
%165 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %142)
%166 = select i1 %164, double %165, double %142
%167 = and i1 %126, %157
%168 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %144)
%169 = select i1 %167, double %168, double %144
%170 = or i1 %124, %155
%171 = and i1 %121, %170
%172 = fmul double %166, %160
%173 = fmul double %163, %169
%174 = fsub double %172, %173
%175 = fmul double %174, 0x7FF0000000000000
%176 = select i1 %171, double %175, double %115
%177 = fmul double %163, %166
%178 = fmul double %169, %160
%179 = fadd double %177, %178
%180 = fmul double %179, 0x7FF0000000000000
%181 = select i1 %171, double %180, double %118
%182 = fadd double %78, %176
%183 = fadd double %83, %181
%184 = tail call double @llvm.fabs.f64(double %182)
%185 = fmul double %182, %182
%186 = fmul double %183, %183
%187 = fadd double %185, %186
%188 = tail call double @llvm.sqrt.f64(double %187)
%189 = fadd double %184, %188
%190 = fmul double %189, 5.000000e-01
%191 = tail call double @llvm.sqrt.f64(double %190)
%192 = fcmp olt double %182, 0.000000e+00
%193 = fcmp olt double %183, 0.000000e+00
%194 = fadd double %191, %191
%195 = fdiv double %183, %194
%196 = fneg double %191
%197 = select i1 %193, double %196, double %191
%198 = select i1 %192, double %197, double %195
%199 = fadd double %198, %198
%200 = fdiv double %183, %199
%201 = select i1 %192, double %200, double %191
%202 = fcmp oeq double %182, 0.000000e+00
%203 = fcmp oeq double %183, 0.000000e+00
%204 = and i1 %202, %203
%205 = select i1 %204, double 0.000000e+00, double %201
%206 = select i1 %204, double 0.000000e+00, double %198
%207 = fmul double %.unpack, 0.000000e+00
%208 = tail call double @llvm.fabs.f64(double %207)
%209 = fsub double %207, %.unpack2
%210 = fmul double %.unpack2, 0.000000e+00
%211 = tail call double @llvm.fabs.f64(double %210)
%212 = fadd double %.unpack, %210
%213 = fcmp uno double %209, 0.000000e+00
%214 = fcmp uno double %212, 0.000000e+00
%215 = and i1 %213, %214
%216 = fcmp oeq double %208, 0x7FF0000000000000
%217 = fcmp oeq double %211, 0x7FF0000000000000
%218 = or i1 %216, %217
%219 = and i1 %218, %58
%220 = and i1 %27, %219
%221 = select i1 %220, double %47, double %31
%222 = and i1 %28, %219
%223 = select i1 %222, double %50, double %34
%224 = or i1 %26, %218
%225 = and i1 %215, %224
%226 = fmul double %221, 0.000000e+00
%227 = fsub double %226, %223
%228 = fmul double %227, 0x7FF0000000000000
%229 = select i1 %225, double %228, double %209
%230 = fmul double %223, 0.000000e+00
%231 = fadd double %221, %230
%232 = fmul double %231, 0x7FF0000000000000
%233 = select i1 %225, double %232, double %212
%234 = fadd double %229, %107
%235 = fadd double %233, %108
%236 = fdiv double %205, %206
%237 = fmul double %205, %236
%238 = fadd double %206, %237
%239 = fmul double %234, %236
%240 = fadd double %235, %239
%241 = fdiv double %240, %238
%242 = fmul double %235, %236
%243 = fsub double %242, %234
%244 = fdiv double %243, %238
%245 = fdiv double %206, %205
%246 = fmul double %206, %245
%247 = fadd double %205, %246
%248 = fmul double %235, %245
%249 = fadd double %234, %248
%250 = fdiv double %249, %247
%251 = fmul double %234, %245
%252 = fsub double %235, %251
%253 = fdiv double %252, %247
%254 = tail call double @llvm.fabs.f64(double %205)
%255 = fcmp oeq double %205, 0.000000e+00
%256 = tail call double @llvm.fabs.f64(double %206)
%257 = fcmp oeq double %206, 0.000000e+00
%258 = fcmp ord double %234, 0.000000e+00
%259 = fcmp ord double %235, 0.000000e+00
%260 = or i1 %259, %258
%261 = and i1 %257, %255
%262 = and i1 %260, %261
%263 = tail call double @llvm.copysign.f64(double 0x7FF0000000000000, double %205)
%264 = fmul double %234, %263
%265 = fmul double %235, %263
%266 = fcmp one double %254, 0x7FF0000000000000
%267 = fcmp one double %256, 0x7FF0000000000000
%268 = and i1 %267, %266
%269 = tail call double @llvm.fabs.f64(double %234)
%270 = fcmp oeq double %269, 0x7FF0000000000000
%271 = tail call double @llvm.fabs.f64(double %235)
%272 = fcmp oeq double %271, 0x7FF0000000000000
%273 = or i1 %272, %270
%274 = and i1 %273, %268
%275 = select i1 %270, double 1.000000e+00, double 0.000000e+00
%276 = tail call double @llvm.copysign.f64(double %275, double %234)
%277 = select i1 %272, double 1.000000e+00, double 0.000000e+00
%278 = tail call double @llvm.copysign.f64(double %277, double %235)
%279 = fmul double %276, %205
%280 = fmul double %278, %206
%281 = fadd double %280, %279
%282 = fmul double %281, 0x7FF0000000000000
%283 = fmul double %276, %206
%284 = fmul double %278, %205
%285 = fsub double %284, %283
%286 = fmul double %285, 0x7FF0000000000000
%287 = fcmp one double %269, 0x7FF0000000000000
%288 = fcmp one double %271, 0x7FF0000000000000
%289 = and i1 %288, %287
%290 = fcmp oeq double %254, 0x7FF0000000000000
%291 = fcmp oeq double %256, 0x7FF0000000000000
%292 = or i1 %291, %290
%293 = and i1 %289, %292
%294 = select i1 %290, double 1.000000e+00, double 0.000000e+00
%295 = tail call double @llvm.copysign.f64(double %294, double %205)
%296 = select i1 %291, double 1.000000e+00, double 0.000000e+00
%297 = tail call double @llvm.copysign.f64(double %296, double %206)
%298 = fmul double %234, %295
%299 = fmul double %235, %297
%300 = fadd double %299, %298
%301 = fmul double %300, 0.000000e+00
%302 = fmul double %235, %295
%303 = fmul double %234, %297
%304 = fsub double %302, %303
%305 = fmul double %304, 0.000000e+00
%306 = fcmp olt double %254, %256
%307 = select i1 %306, double %241, double %250
%308 = select i1 %306, double %244, double %253
%309 = select i1 %293, double %301, double %307
%310 = select i1 %293, double %305, double %308
%311 = select i1 %274, double %282, double %309
%312 = select i1 %274, double %286, double %310
%313 = select i1 %262, double %264, double %311
%314 = select i1 %262, double %265, double %312
%315 = fcmp uno double %307, 0.000000e+00
%316 = fcmp uno double %308, 0.000000e+00
%317 = and i1 %315, %316
%318 = select i1 %317, double %313, double %307
%319 = select i1 %317, double %314, double %308
%320 = fmul double %318, %318
%321 = fmul double %319, %319
%322 = fadd double %320, %321
%323 = tail call double @llvm.sqrt.f64(double %322)
%324 = tail call double @llvm.log.f64(double %323)
%325 = tail call double @atan2(double %319, double %318)
%326 = tail call double @llvm.fabs.f64(double %324)
%327 = tail call double @llvm.fabs.f64(double %325)
%328 = fmul double %324, 0.000000e+00
%329 = tail call double @llvm.fabs.f64(double %328)
%330 = fneg double %325
%331 = tail call double @llvm.fabs.f64(double %330)
%332 = fadd double %325, %328
%333 = fneg double %324
%334 = tail call double @llvm.fabs.f64(double %333)
%335 = fmul double %325, 0.000000e+00
%336 = tail call double @llvm.fabs.f64(double %335)
%337 = fsub double %335, %324
%338 = fcmp uno double %332, 0.000000e+00
%339 = fcmp uno double %337, 0.000000e+00
%340 = and i1 %339, %338
%341 = fcmp uno double %324, 0.000000e+00
%342 = fcmp uno double %325, 0.000000e+00
%343 = fcmp oeq double %326, 0x7FF0000000000000
%344 = fcmp oeq double %327, 0x7FF0000000000000
%345 = or i1 %344, %343
%346 = select i1 %343, double 1.000000e+00, double 0.000000e+00
%347 = tail call double @llvm.copysign.f64(double %346, double %324)
%348 = select i1 %345, double %347, double %324
%349 = select i1 %344, double 1.000000e+00, double 0.000000e+00
%350 = tail call double @llvm.copysign.f64(double %349, double %325)
%351 = select i1 %345, double %350, double %325
%352 = fcmp oeq double %329, 0x7FF0000000000000
%353 = fcmp oeq double %331, 0x7FF0000000000000
%354 = or i1 %353, %352
%355 = fcmp oeq double %336, 0x7FF0000000000000
%356 = or i1 %355, %354
%357 = fcmp oeq double %334, 0x7FF0000000000000
%358 = or i1 %357, %356
%359 = xor i1 %345, true
%360 = and i1 %358, %359
%361 = and i1 %341, %360
%362 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %348)
%363 = select i1 %361, double %362, double %348
%364 = and i1 %342, %360
%365 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %351)
%366 = select i1 %364, double %365, double %351
%367 = or i1 %345, %358
%368 = and i1 %340, %367
%369 = fmul double %363, 0.000000e+00
%370 = fadd double %366, %369
%371 = fmul double %370, 0x7FF0000000000000
%372 = select i1 %368, double %371, double %332
%373 = fmul double %366, 0.000000e+00
%374 = fsub double %373, %363
%375 = fmul double %374, 0x7FF0000000000000
%376 = select i1 %368, double %375, double %337
%377 = tail call double @llvm.fabs.f64(double %372)
%378 = tail call double @llvm.fabs.f64(double %376)
%379 = fmul double %372, 2.000000e+00
%380 = tail call double @llvm.fabs.f64(double %379)
%381 = fmul double %376, 0.000000e+00
%382 = tail call double @llvm.fabs.f64(double %381)
%383 = fsub double %379, %381
%384 = fmul double %376, 2.000000e+00
%385 = tail call double @llvm.fabs.f64(double %384)
%386 = fmul double %372, 0.000000e+00
%387 = tail call double @llvm.fabs.f64(double %386)
%388 = fadd double %384, %386
%389 = fcmp uno double %383, 0.000000e+00
%390 = fcmp uno double %388, 0.000000e+00
%391 = and i1 %389, %390
%392 = fcmp oeq double %377, 0x7FF0000000000000
%393 = fcmp oeq double %378, 0x7FF0000000000000
%394 = or i1 %392, %393
%395 = select i1 %392, double 1.000000e+00, double 0.000000e+00
%396 = tail call double @llvm.copysign.f64(double %395, double %372)
%397 = select i1 %394, double %396, double %372
%398 = select i1 %393, double 1.000000e+00, double 0.000000e+00
%399 = tail call double @llvm.copysign.f64(double %398, double %376)
%400 = select i1 %394, double %399, double %376
%401 = fcmp uno double %397, 0.000000e+00
%402 = fcmp uno double %400, 0.000000e+00
%403 = fcmp oeq double %380, 0x7FF0000000000000
%404 = fcmp oeq double %382, 0x7FF0000000000000
%405 = or i1 %403, %404
%406 = fcmp oeq double %387, 0x7FF0000000000000
%407 = or i1 %406, %405
%408 = fcmp oeq double %385, 0x7FF0000000000000
%409 = or i1 %408, %407
%410 = xor i1 %394, true
%411 = and i1 %409, %410
%412 = and i1 %401, %411
%413 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %397)
%414 = select i1 %412, double %413, double %397
%415 = and i1 %402, %411
%416 = tail call double @llvm.copysign.f64(double 0.000000e+00, double %400)
%417 = select i1 %415, double %416, double %400
%418 = or i1 %394, %409
%419 = and i1 %391, %418
%420 = fmul double %414, 2.000000e+00
%421 = fmul double %417, 0.000000e+00
%422 = fsub double %420, %421
%423 = fmul double %422, 0x7FF0000000000000
%424 = select i1 %419, double %423, double %383
%425 = fmul double %417, 2.000000e+00
%426 = fmul double %414, 0.000000e+00
%427 = fadd double %425, %426
%428 = fmul double %427, 0x7FF0000000000000
%429 = select i1 %419, double %428, double %388
%430 = getelementptr { double, double }, ptr %7, i64 %9
store double %424, ptr %430, align 8
%.repack4 = getelementptr { double, double }, ptr %7, i64 %9, i32 1
store double %429, ptr %.repack4, align 8
%431 = add nuw nsw i64 %9, 1
%exitcond.not = icmp eq i64 %431, 4
br i1 %exitcond.not, label %main.exit, label %8
main.exit: ; preds = %8
ret void
}
attributes #0 = { mustprogress nofree nosync nounwind willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nofree nosync nounwind memory(readwrite, inaccessiblemem: none) "frame-pointer"="all" }
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment