Advertisement
Guest User

Untitled

a guest
Apr 1st, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 4.23 KB | None | 0 0
  1. ; Function Attrs: nounwind readnone uwtable
  2. define dso_local i32 @"?factorial@@YAHH@Z"(i32) local_unnamed_addr #0 {
  3.   %2 = icmp sgt i32 %0, 1
  4.   br i1 %2, label %3, label %79
  5.  
  6. ; <label>:3:                                      ; preds = %1
  7.   %4 = add i32 %0, -1
  8.   %5 = icmp ult i32 %4, 8
  9.   br i1 %5, label %70, label %6
  10.  
  11. ; <label>:6:                                      ; preds = %3
  12.   %7 = and i32 %4, -8
  13.   %8 = sub i32 %0, %7
  14.   %9 = insertelement <4 x i32> undef, i32 %0, i32 0
  15.   %10 = shufflevector <4 x i32> %9, <4 x i32> undef, <4 x i32> zeroinitializer
  16.   %11 = add <4 x i32> %10, <i32 0, i32 -1, i32 -2, i32 -3>
  17.   %12 = add i32 %7, -8
  18.   %13 = lshr exact i32 %12, 3
  19.   %14 = add nuw nsw i32 %13, 1
  20.   %15 = and i32 %14, 3
  21.   %16 = icmp ult i32 %12, 24
  22.   br i1 %16, label %42, label %17
  23.  
  24. ; <label>:17:                                     ; preds = %6
  25.   %18 = sub nsw i32 %14, %15
  26.   br label %19
  27.  
  28. ; <label>:19:                                     ; preds = %19, %17
  29.   %20 = phi <4 x i32> [ %11, %17 ], [ %39, %19 ]
  30.   %21 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %17 ], [ %37, %19 ]
  31.   %22 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %17 ], [ %38, %19 ]
  32.   %23 = phi i32 [ %18, %17 ], [ %40, %19 ]
  33.   %24 = add <4 x i32> %20, <i32 -4, i32 -4, i32 -4, i32 -4>
  34.   %25 = mul nsw <4 x i32> %20, %21
  35.   %26 = mul nsw <4 x i32> %24, %22
  36.   %27 = add <4 x i32> %20, <i32 -8, i32 -8, i32 -8, i32 -8>
  37.   %28 = add <4 x i32> %20, <i32 -12, i32 -12, i32 -12, i32 -12>
  38.   %29 = mul nsw <4 x i32> %27, %25
  39.   %30 = mul nsw <4 x i32> %28, %26
  40.   %31 = add <4 x i32> %20, <i32 -16, i32 -16, i32 -16, i32 -16>
  41.   %32 = add <4 x i32> %20, <i32 -20, i32 -20, i32 -20, i32 -20>
  42.   %33 = mul nsw <4 x i32> %31, %29
  43.   %34 = mul nsw <4 x i32> %32, %30
  44.   %35 = add <4 x i32> %20, <i32 -24, i32 -24, i32 -24, i32 -24>
  45.   %36 = add <4 x i32> %20, <i32 -28, i32 -28, i32 -28, i32 -28>
  46.   %37 = mul nsw <4 x i32> %35, %33
  47.   %38 = mul nsw <4 x i32> %36, %34
  48.   %39 = add <4 x i32> %20, <i32 -32, i32 -32, i32 -32, i32 -32>
  49.   %40 = add i32 %23, -4
  50.   %41 = icmp eq i32 %40, 0
  51.   br i1 %41, label %42, label %19, !llvm.loop !8
  52.  
  53. ; <label>:42:                                     ; preds = %19, %6
  54.   %43 = phi <4 x i32> [ undef, %6 ], [ %37, %19 ]
  55.   %44 = phi <4 x i32> [ undef, %6 ], [ %38, %19 ]
  56.   %45 = phi <4 x i32> [ %11, %6 ], [ %39, %19 ]
  57.   %46 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %6 ], [ %37, %19 ]
  58.   %47 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %6 ], [ %38, %19 ]
  59.   %48 = icmp eq i32 %15, 0
  60.   br i1 %48, label %60, label %49
  61.  
  62. ; <label>:49:                                     ; preds = %42, %49
  63.   %50 = phi <4 x i32> [ %57, %49 ], [ %45, %42 ]
  64.   %51 = phi <4 x i32> [ %55, %49 ], [ %46, %42 ]
  65.   %52 = phi <4 x i32> [ %56, %49 ], [ %47, %42 ]
  66.   %53 = phi i32 [ %58, %49 ], [ %15, %42 ]
  67.   %54 = add <4 x i32> %50, <i32 -4, i32 -4, i32 -4, i32 -4>
  68.   %55 = mul nsw <4 x i32> %50, %51
  69.   %56 = mul nsw <4 x i32> %54, %52
  70.   %57 = add <4 x i32> %50, <i32 -8, i32 -8, i32 -8, i32 -8>
  71.   %58 = add i32 %53, -1
  72.   %59 = icmp eq i32 %58, 0
  73.   br i1 %59, label %60, label %49, !llvm.loop !10
  74.  
  75. ; <label>:60:                                     ; preds = %49, %42
  76.   %61 = phi <4 x i32> [ %43, %42 ], [ %55, %49 ]
  77.   %62 = phi <4 x i32> [ %44, %42 ], [ %56, %49 ]
  78.   %63 = mul <4 x i32> %62, %61
  79.   %64 = shufflevector <4 x i32> %63, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  80.   %65 = mul <4 x i32> %63, %64
  81.   %66 = shufflevector <4 x i32> %65, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  82.   %67 = mul <4 x i32> %65, %66
  83.   %68 = extractelement <4 x i32> %67, i32 0
  84.   %69 = icmp eq i32 %4, %7
  85.   br i1 %69, label %79, label %70
  86.  
  87. ; <label>:70:                                     ; preds = %60, %3
  88.   %71 = phi i32 [ %0, %3 ], [ %8, %60 ]
  89.   %72 = phi i32 [ 1, %3 ], [ %68, %60 ]
  90.   br label %73
  91.  
  92. ; <label>:73:                                     ; preds = %70, %73
  93.   %74 = phi i32 [ %76, %73 ], [ %71, %70 ]
  94.   %75 = phi i32 [ %77, %73 ], [ %72, %70 ]
  95.   %76 = add nsw i32 %74, -1
  96.   %77 = mul nsw i32 %74, %75
  97.   %78 = icmp sgt i32 %76, 1
  98.   br i1 %78, label %73, label %79, !llvm.loop !12
  99.  
  100. ; <label>:79:                                     ; preds = %73, %60, %1
  101.   %80 = phi i32 [ 1, %1 ], [ %68, %60 ], [ %77, %73 ]
  102.   ret i32 %80
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement