Advertisement
Guest User

Untitled

a guest
Jan 13th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 6.17 KB | None | 0 0
  1. ; ModuleID = 'out.bc'
  2. source_filename = "llvm-link"
  3. target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  4. target triple = "x86_64-unknown-linux-gnu"
  5.  
  6. @clz_table_4bit = internal unnamed_addr constant [16 x i8] c"\04\03\02\02\01\01\01\01\00\00\00\00\00\00\00\00", align 16
  7.  
  8. ; Function Attrs: norecurse nounwind uwtable
  9. define i32 @main(i32 %argc, i8** nocapture readonly %argv) local_unnamed_addr #0 {
  10. entry:
  11.   %arrayidx = getelementptr inbounds i8*, i8** %argv, i64 1
  12.   %0 = load i8*, i8** %arrayidx, align 8, !tbaa !1
  13.   %call.i = tail call i64 @strtol(i8* nocapture nonnull %0, i8** null, i32 10) #2
  14.   %conv.i = trunc i64 %call.i to i32
  15.   %cmp.i = icmp slt i32 %conv.i, 0
  16.   %sext = shl i64 %call.i, 32
  17.   %conv1.i = ashr exact i64 %sext, 32
  18.   %sub.i = sub nsw i64 0, %conv1.i
  19.   %cond.i = select i1 %cmp.i, i64 %sub.i, i64 %conv1.i
  20.   %conv3.i = trunc i64 %cond.i to i32
  21.   %cmp.i.i = icmp ult i32 %conv3.i, 65536
  22.   %shl.i.i = shl i32 %conv3.i, 16
  23.   %x.addr.0.i.i = select i1 %cmp.i.i, i32 %shl.i.i, i32 %conv3.i
  24.   %n.0.i.i = select i1 %cmp.i.i, i32 16, i32 0
  25.   %cmp2.i.i = icmp ult i32 %x.addr.0.i.i, 16777216
  26.   %add.i.i = or i32 %n.0.i.i, 8
  27.   %shl4.i.i = shl i32 %x.addr.0.i.i, 8
  28.   %x.addr.1.i.i = select i1 %cmp2.i.i, i32 %shl4.i.i, i32 %x.addr.0.i.i
  29.   %n.1.i.i = select i1 %cmp2.i.i, i32 %add.i.i, i32 %n.0.i.i
  30.   %cmp7.i.i = icmp ult i32 %x.addr.1.i.i, 268435456
  31.   %add9.i.i = or i32 %n.1.i.i, 4
  32.   %shl10.i.i = shl i32 %x.addr.1.i.i, 4
  33.   %x.addr.2.i.i = select i1 %cmp7.i.i, i32 %shl10.i.i, i32 %x.addr.1.i.i
  34.   %n.2.i.i = select i1 %cmp7.i.i, i32 %add9.i.i, i32 %n.1.i.i
  35.   %shr.i.i = lshr i32 %x.addr.2.i.i, 28
  36.   %idxprom.i.i = zext i32 %shr.i.i to i64
  37.   %arrayidx.i.i = getelementptr inbounds [16 x i8], [16 x i8]* @clz_table_4bit, i64 0, i64 %idxprom.i.i
  38.   %1 = load i8, i8* %arrayidx.i.i, align 1
  39.   %conv.i.i = zext i8 %1 to i32
  40.   %add12.i.i = add nuw nsw i32 %n.2.i.i, %conv.i.i
  41.   %shl.i = and i64 %sext, -9223372036854775808
  42.   %add.i = shl i32 %add12.i.i, 24
  43.   %sext.i = add i32 %add.i, 352321536
  44.   %conv6.i = ashr exact i32 %sext.i, 24
  45.   %sub7.i = sub nsw i32 1074, %conv6.i
  46.   %conv86.i = zext i32 %sub7.i to i64
  47.   %shl9.i = shl i64 %conv86.i, 52
  48.   %sh_prom.i = zext i32 %conv6.i to i64
  49.   %shl12.i = shl i64 %cond.i, %sh_prom.i
  50.   %add10.i = add i64 %shl12.i, %shl.i
  51.   %add13.i = add i64 %add10.i, %shl9.i
  52.   %2 = bitcast i64 %add13.i to double
  53.   %cmp.i1 = icmp slt i32 %argc, 0
  54.   %a.lobit.i2 = lshr i32 %argc, 31
  55.   %conv1.i3 = sext i32 %argc to i64
  56.   %sub.i4 = sub nsw i64 0, %conv1.i3
  57.   %cond.i5 = select i1 %cmp.i1, i64 %sub.i4, i64 %conv1.i3
  58.   %conv3.i6 = trunc i64 %cond.i5 to i32
  59.   %cmp.i.i7 = icmp ult i32 %conv3.i6, 65536
  60.   %shl.i.i8 = shl i32 %conv3.i6, 16
  61.   %x.addr.0.i.i9 = select i1 %cmp.i.i7, i32 %shl.i.i8, i32 %conv3.i6
  62.   %n.0.i.i10 = select i1 %cmp.i.i7, i32 16, i32 0
  63.   %cmp2.i.i11 = icmp ult i32 %x.addr.0.i.i9, 16777216
  64.   %add.i.i12 = or i32 %n.0.i.i10, 8
  65.   %shl4.i.i13 = shl i32 %x.addr.0.i.i9, 8
  66.   %x.addr.1.i.i14 = select i1 %cmp2.i.i11, i32 %shl4.i.i13, i32 %x.addr.0.i.i9
  67.   %n.1.i.i15 = select i1 %cmp2.i.i11, i32 %add.i.i12, i32 %n.0.i.i10
  68.   %cmp7.i.i16 = icmp ult i32 %x.addr.1.i.i14, 268435456
  69.   %add9.i.i17 = or i32 %n.1.i.i15, 4
  70.   %shl10.i.i18 = shl i32 %x.addr.1.i.i14, 4
  71.   %x.addr.2.i.i19 = select i1 %cmp7.i.i16, i32 %shl10.i.i18, i32 %x.addr.1.i.i14
  72.   %n.2.i.i20 = select i1 %cmp7.i.i16, i32 %add9.i.i17, i32 %n.1.i.i15
  73.   %shr.i.i21 = lshr i32 %x.addr.2.i.i19, 28
  74.   %idxprom.i.i22 = zext i32 %shr.i.i21 to i64
  75.   %arrayidx.i.i23 = getelementptr inbounds [16 x i8], [16 x i8]* @clz_table_4bit, i64 0, i64 %idxprom.i.i22
  76.   %3 = load i8, i8* %arrayidx.i.i23, align 1
  77.   %conv.i.i24 = zext i8 %3 to i32
  78.   %add12.i.i25 = add nuw nsw i32 %conv.i.i24, %n.2.i.i20
  79.   %conv55.i26 = zext i32 %a.lobit.i2 to i64
  80.   %shl.i27 = shl nuw i64 %conv55.i26, 63
  81.   %add.i28 = shl i32 %add12.i.i25, 24
  82.   %sext.i29 = add i32 %add.i28, 352321536
  83.   %conv6.i30 = ashr exact i32 %sext.i29, 24
  84.   %sub7.i31 = sub nsw i32 1074, %conv6.i30
  85.   %conv86.i32 = zext i32 %sub7.i31 to i64
  86.   %shl9.i33 = shl i64 %conv86.i32, 52
  87.   %sh_prom.i34 = zext i32 %conv6.i30 to i64
  88.   %shl12.i35 = shl i64 %cond.i5, %sh_prom.i34
  89.   %add10.i36 = add i64 %shl12.i35, %shl.i27
  90.   %add13.i37 = add i64 %add10.i36, %shl9.i33
  91.   %4 = bitcast i64 %add13.i37 to double
  92.   %5 = fadd double %4, %2
  93.   %6 = fcmp ogt double %5, 0x41F0000000000000
  94.   %7 = frem double %5, 0x41F0000000000000
  95.   %.1 = select i1 %6, double %7, double %5
  96.   %8 = fcmp ogt double %.1, 0x41DFFFFFFFC00000
  97.   %9 = fadd double %.1, 0xC1E0000000000000
  98.   %10 = fadd double %9, 0xC1E0000000000000
  99.   %.2 = select i1 %8, double %10, double %.1
  100.   %11 = fcmp olt double %5, 0xC1E0000000000000
  101.   %12 = fadd double %.2, 0x41DFFFFFFFC00000
  102.   %13 = fadd double %12, 0x41E0000000200000
  103.   %.0 = select i1 %11, double %13, double %.2
  104.   %14 = fptosi double %.0 to i32
  105.   ret i32 %14
  106. }
  107.  
  108. ; Function Attrs: nounwind
  109. declare i64 @strtol(i8* readonly, i8** nocapture, i32) local_unnamed_addr #1
  110.  
  111. attributes #0 = { norecurse nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
  112. attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
  113. attributes #2 = { nounwind }
  114.  
  115. !llvm.ident = !{!0, !0}
  116.  
  117. !0 = !{!"clang version 4.0.0 (https://github.com/llvm-mirror/clang 98d4f7f7bd5b8b7a797c5adbf8f39e3505cd94d5) (https://github.com/llvm-mirror/llvm 5e6a4929c6dd212b9be713f23313604aacb1822d)"}
  118. !1 = !{!2, !2, i64 0}
  119. !2 = !{!"any pointer", !3, i64 0}
  120. !3 = !{!"omnipotent char", !4, i64 0}
  121. !4 = !{!"Simple C++ TBAA"}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement