Advertisement
lawliet89

sort.ll

May 19th, 2014
2,761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 19.87 KB | None | 0 0
  1. ; ModuleID = '../../scratch/sort.ll'
  2. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
  3. target triple = "x86_64-pc-linux-gnu"
  4.  
  5. @0 = private unnamed_addr constant [9 x i32] [i32 7, i32 12, i32 1, i32 -2, i32 0, i32 15, i32 4, i32 11, i32 9], align 16
  6. @1 = private unnamed_addr constant [23 x i8] c"\0A\0AUnsorted array is:  \00", align 1
  7. @2 = private unnamed_addr constant [5 x i8] c" %d \00", align 1
  8. @3 = private unnamed_addr constant [21 x i8] c"\0A\0ASorted array is:  \00", align 1
  9. @4 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
  10. @5 = common global i32 0
  11. @6 = common global i32 0
  12. @7 = common global i32 0
  13. @8 = common global i32 0
  14. @9 = private global [8 x i8*] [i8* blockaddress(@sort, %3), i8* blockaddress(@sort, %11), i8* blockaddress(@sort, %12), i8* blockaddress(@sort, %18), i8* blockaddress(@sort, %3), i8* blockaddress(@sort, %35), i8* blockaddress(@sort, %36), i8* blockaddress(@sort, %9)]
  15. @10 = private global [16 x i8*] [i8* blockaddress(@foo, %24), i8* blockaddress(@foo, %26), i8* blockaddress(@foo, %36), i8* blockaddress(@foo, %6), i8* blockaddress(@foo, %52), i8* blockaddress(@foo, %70), i8* blockaddress(@foo, %72), i8* blockaddress(@foo, %73), i8* blockaddress(@foo, %80), i8* blockaddress(@foo, %98), i8* blockaddress(@foo, %99), i8* blockaddress(@foo, %102), i8* blockaddress(@foo, %104), i8* blockaddress(@foo, %123), i8* blockaddress(@foo, %125), i8* blockaddress(@foo, %127)]
  16.  
  17. ; Function Attrs: nounwind uwtable
  18. define i32 @main() #0 {
  19.   %1 = alloca [9 x i32], align 16
  20.   %2 = bitcast i32 0 to i32
  21.   %3 = bitcast [9 x i32]* %1 to i8*
  22.   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* bitcast ([9 x i32]* @0 to i8*), i64 36, i32 16, i1 false)
  23.   %4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([23 x i8]* @1, i64 0, i64 0)) #1
  24.   %5 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 0
  25.   %6 = load i32* %5, align 16
  26.   %7 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %6) #1
  27.   %8 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 1
  28.   %9 = load i32* %8, align 4
  29.   %10 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %9) #1
  30.   %11 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 2
  31.   %12 = load i32* %11, align 8
  32.   %13 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %12) #1
  33.   %14 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 3
  34.   %15 = load i32* %14, align 4
  35.   %16 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %15) #1
  36.   %17 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 4
  37.   %18 = load i32* %17, align 16
  38.   %19 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %18) #1
  39.   %20 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 5
  40.   %21 = load i32* %20, align 4
  41.   %22 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %21) #1
  42.   %23 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 6
  43.   %24 = load i32* %23, align 8
  44.   %25 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %24) #1
  45.   %26 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 7
  46.   %27 = load i32* %26, align 4
  47.   %28 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %27) #1
  48.   %29 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 8
  49.   %30 = load i32* %29, align 16
  50.   %31 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %30) #1
  51.   %32 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 0
  52.   call void @sort(i32* %32, i32 0, i32 8)
  53.   %33 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([21 x i8]* @3, i64 0, i64 0)) #1
  54.   %34 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 0
  55.   %35 = load i32* %34, align 16
  56.   %36 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %35) #1
  57.   %37 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 1
  58.   %38 = load i32* %37, align 4
  59.   %39 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %38) #1
  60.   %40 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 2
  61.   %41 = load i32* %40, align 8
  62.   %42 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %41) #1
  63.   %43 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 3
  64.   %44 = load i32* %43, align 4
  65.   %45 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %44) #1
  66.   %46 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 4
  67.   %47 = load i32* %46, align 16
  68.   %48 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %47) #1
  69.   %49 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 5
  70.   %50 = load i32* %49, align 4
  71.   %51 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %50) #1
  72.   %52 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 6
  73.   %53 = load i32* %52, align 8
  74.   %54 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %53) #1
  75.   %55 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 7
  76.   %56 = load i32* %55, align 4
  77.   %57 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %56) #1
  78.   %58 = getelementptr inbounds [9 x i32]* %1, i64 0, i64 8
  79.   %59 = load i32* %58, align 16
  80.   %60 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8]* @2, i64 0, i64 0), i32 %59) #1
  81.   %61 = call i32 @putchar(i32 10) #1
  82.   ret i32 0
  83. }
  84.  
  85. ; Function Attrs: nounwind
  86. declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1
  87.  
  88. ; Function Attrs: nounwind
  89. declare i32 @printf(i8* nocapture readonly, ...) #2
  90.  
  91. ; Function Attrs: nounwind uwtable
  92. define void @sort(i32* %a, i32 %l, i32 %r) #0 {
  93.   %1 = bitcast i32 0 to i32
  94.   %2 = icmp slt i32 %l, %r
  95.   br label %3
  96.  
  97. ; <label>:3                                       ; preds = %3, %0, %9, %35, %18, %12, %11
  98.   %4 = phi i32 [ undef, %0 ], [ %4, %9 ], [ %5, %35 ], [ %4, %18 ], [ %4, %12 ], [ %l, %11 ], [ %4, %3 ]
  99.   %5 = phi i32 [ undef, %0 ], [ %5, %9 ], [ %5, %35 ], [ %5, %18 ], [ %15, %12 ], [ %5, %11 ], [ %5, %3 ]
  100.   %6 = phi i32 [ 2, %11 ], [ %17, %12 ], [ %34, %18 ], [ 2, %35 ], [ 7, %0 ], [ %10, %9 ], [ 6, %3 ]
  101.   %7 = getelementptr inbounds [8 x i8*]* @9, i32 0, i32 %6
  102.   %8 = load i8** %7
  103.   indirectbr i8* %8, [label %3, label %11, label %12, label %18, label %9, label %35, label %36]
  104.  
  105. ; <label>:9                                       ; preds = %3
  106.   %10 = select i1 %2, i32 1, i32 0
  107.   br label %3
  108.  
  109. ; <label>:11                                      ; preds = %3
  110.   br label %3
  111.  
  112. ; <label>:12                                      ; preds = %3
  113.   %13 = tail call i32 @foo(i32* %a, i32 %4, i32 %r)
  114.   %14 = add nsw i32 %13, -1
  115.   tail call void @sort(i32* %a, i32 %4, i32 %14)
  116.   %15 = add nsw i32 %13, 1
  117.   %16 = icmp slt i32 %15, %r
  118.   %17 = select i1 %16, i32 3, i32 4
  119.   br label %3
  120.  
  121. ; <label>:18                                      ; preds = %3
  122.   %19 = load i32* @8
  123.   %20 = add i32 %19, 1211840023
  124.   %21 = icmp eq i32 %20, 0
  125.   %22 = select i1 %21, i32 1211840023, i32 %20
  126.   store i32 %22, i32* @8
  127.   %23 = load i32* @5
  128.   %24 = sub i32 %23, 363848358
  129.   %25 = icmp eq i32 %24, 0
  130.   %26 = select i1 %25, i32 363848358, i32 %24
  131.   store i32 %26, i32* @5
  132.   %27 = sext i32 %22 to i96
  133.   %28 = sext i32 %26 to i96
  134.   %29 = mul i96 %27, %27
  135.   %30 = mul i96 %28, %28
  136.   %31 = mul i96 %30, 7
  137.   %32 = sub i96 %31, 1
  138.   %33 = icmp ne i96 %29, %32
  139.   %34 = select i1 %33, i32 5, i32 4
  140.   br label %3
  141.  
  142. ; <label>:35                                      ; preds = %3
  143.   br label %3
  144.  
  145. ; <label>:36                                      ; preds = %3
  146.   ret void
  147. }
  148.  
  149. ; Function Attrs: nounwind uwtable
  150. define i32 @foo(i32* nocapture %a, i32 %l, i32 %r) #0 {
  151.   %1 = bitcast i32 0 to i32
  152.   %2 = sext i32 %l to i64
  153.   %3 = getelementptr inbounds i32* %a, i64 %2
  154.   %4 = load i32* %3, align 4
  155.   %5 = add nsw i32 %r, 1
  156.   br label %6
  157.  
  158. ; <label>:6                                       ; preds = %6, %0, %127, %104, %102, %99, %98, %80, %73, %72, %70, %52, %36, %26, %24
  159.   %7 = phi i32 [ undef, %0 ], [ %7, %24 ], [ %12, %127 ], [ %7, %104 ], [ %7, %102 ], [ %7, %99 ], [ %18, %98 ], [ %7, %80 ], [ %7, %73 ], [ %7, %72 ], [ %12, %70 ], [ %7, %52 ], [ %7, %36 ], [ %7, %26 ], [ %7, %6 ]
  160.   %8 = phi i64 [ undef, %0 ], [ %8, %24 ], [ %128, %127 ], [ %8, %104 ], [ %8, %102 ], [ %8, %99 ], [ %17, %98 ], [ %8, %80 ], [ %8, %73 ], [ %8, %72 ], [ %71, %70 ], [ %8, %52 ], [ %8, %36 ], [ %8, %26 ], [ %8, %6 ]
  161.   %9 = phi i32 [ undef, %0 ], [ %13, %24 ], [ %9, %127 ], [ %9, %104 ], [ %9, %102 ], [ %9, %99 ], [ %9, %98 ], [ %9, %80 ], [ %9, %73 ], [ %9, %72 ], [ %9, %70 ], [ %9, %52 ], [ %9, %36 ], [ %9, %26 ], [ %15, %6 ]
  162.   %10 = phi i64 [ undef, %0 ], [ %25, %24 ], [ %10, %127 ], [ %10, %104 ], [ %10, %102 ], [ %10, %99 ], [ %10, %98 ], [ %10, %80 ], [ %10, %73 ], [ %10, %72 ], [ %10, %70 ], [ %10, %52 ], [ %10, %36 ], [ %10, %26 ], [ %14, %6 ]
  163.   %11 = phi i32 [ %5, %0 ], [ %11, %24 ], [ %11, %127 ], [ %11, %104 ], [ %18, %102 ], [ %11, %99 ], [ %11, %98 ], [ %11, %80 ], [ %11, %73 ], [ %11, %72 ], [ %11, %70 ], [ %11, %52 ], [ %11, %36 ], [ %11, %26 ], [ %11, %6 ]
  164.   %12 = phi i32 [ undef, %0 ], [ %11, %24 ], [ %12, %127 ], [ %12, %104 ], [ %12, %102 ], [ %12, %99 ], [ %12, %98 ], [ %12, %80 ], [ %12, %73 ], [ %12, %72 ], [ %12, %70 ], [ %12, %52 ], [ %12, %36 ], [ %12, %26 ], [ %12, %6 ]
  165.   %13 = phi i32 [ %l, %0 ], [ %13, %24 ], [ %13, %127 ], [ %13, %104 ], [ %15, %102 ], [ %13, %99 ], [ %13, %98 ], [ %13, %80 ], [ %13, %73 ], [ %13, %72 ], [ %13, %70 ], [ %13, %52 ], [ %13, %36 ], [ %13, %26 ], [ %13, %6 ]
  166.   %14 = phi i64 [ undef, %0 ], [ %14, %24 ], [ %14, %127 ], [ %14, %104 ], [ %14, %102 ], [ %14, %99 ], [ %14, %98 ], [ %14, %80 ], [ %14, %73 ], [ %14, %72 ], [ %14, %70 ], [ %14, %52 ], [ %14, %36 ], [ %27, %26 ], [ %14, %6 ]
  167.   %15 = phi i32 [ undef, %0 ], [ %15, %24 ], [ %15, %127 ], [ %15, %104 ], [ %15, %102 ], [ %15, %99 ], [ %15, %98 ], [ %15, %80 ], [ %15, %73 ], [ %15, %72 ], [ %15, %70 ], [ %15, %52 ], [ %15, %36 ], [ %28, %26 ], [ %15, %6 ]
  168.   %16 = phi i32* [ undef, %0 ], [ %16, %24 ], [ %16, %127 ], [ %16, %104 ], [ %16, %102 ], [ %16, %99 ], [ %16, %98 ], [ %16, %80 ], [ %16, %73 ], [ %16, %72 ], [ %16, %70 ], [ %16, %52 ], [ %16, %36 ], [ %29, %26 ], [ %16, %6 ]
  169.   %17 = phi i64 [ undef, %0 ], [ %17, %24 ], [ %17, %127 ], [ %17, %104 ], [ %17, %102 ], [ %17, %99 ], [ %17, %98 ], [ %17, %80 ], [ %74, %73 ], [ %17, %72 ], [ %17, %70 ], [ %17, %52 ], [ %17, %36 ], [ %17, %26 ], [ %17, %6 ]
  170.   %18 = phi i32 [ undef, %0 ], [ %18, %24 ], [ %18, %127 ], [ %18, %104 ], [ %18, %102 ], [ %18, %99 ], [ %18, %98 ], [ %18, %80 ], [ %75, %73 ], [ %18, %72 ], [ %18, %70 ], [ %18, %52 ], [ %18, %36 ], [ %18, %26 ], [ %18, %6 ]
  171.   %19 = phi i32* [ undef, %0 ], [ %19, %24 ], [ %19, %127 ], [ %19, %104 ], [ %19, %102 ], [ %19, %99 ], [ %19, %98 ], [ %19, %80 ], [ %76, %73 ], [ %19, %72 ], [ %19, %70 ], [ %19, %52 ], [ %19, %36 ], [ %19, %26 ], [ %19, %6 ]
  172.   %20 = phi i32 [ undef, %0 ], [ %20, %24 ], [ %20, %127 ], [ %20, %104 ], [ %20, %102 ], [ %20, %99 ], [ %20, %98 ], [ %20, %80 ], [ %77, %73 ], [ %20, %72 ], [ %20, %70 ], [ %20, %52 ], [ %20, %36 ], [ %20, %26 ], [ %20, %6 ]
  173.   %21 = phi i32 [ 0, %0 ], [ 1, %24 ], [ %35, %26 ], [ %51, %36 ], [ %69, %52 ], [ 6, %70 ], [ 7, %72 ], [ %79, %73 ], [ %97, %80 ], [ 7, %98 ], [ %101, %99 ], [ 0, %102 ], [ %122, %104 ], [ 6, %127 ], [ 1, %6 ]
  174.   %22 = getelementptr inbounds [16 x i8*]* @10, i32 0, i32 %21
  175.   %23 = load i8** %22
  176.   indirectbr i8* %23, [label %24, label %26, label %36, label %6, label %52, label %70, label %72, label %73, label %80, label %98, label %99, label %102, label %104, label %123, label %125, label %127]
  177.  
  178. ; <label>:24                                      ; preds = %6
  179.   %25 = sext i32 %13 to i64
  180.   br label %6
  181.  
  182. ; <label>:26                                      ; preds = %6
  183.   %27 = add nsw i64 %10, 1
  184.   %28 = add nsw i32 %9, 1
  185.   %29 = getelementptr inbounds i32* %a, i64 %27
  186.   %30 = load i32* %29, align 4
  187.   %31 = icmp sle i32 %30, %4
  188.   %32 = trunc i64 %10 to i32
  189.   %33 = icmp slt i32 %32, %r
  190.   %34 = and i1 %31, %33
  191.   %35 = select i1 %34, i32 2, i32 4
  192.   br label %6
  193.  
  194. ; <label>:36                                      ; preds = %6
  195.   %37 = load i32* @5
  196.   %38 = sub i32 %37, 1609607087
  197.   %39 = icmp eq i32 %38, 0
  198.   %40 = select i1 %39, i32 1609607087, i32 %38
  199.   store i32 %40, i32* @5
  200.   %41 = load i32* @7
  201.   %42 = sub i32 %41, 1387006632
  202.   %43 = icmp eq i32 %42, 0
  203.   %44 = select i1 %43, i32 1387006632, i32 %42
  204.   store i32 %44, i32* @7
  205.   %45 = sext i32 %40 to i96
  206.   %46 = mul i96 %45, %45
  207.   %47 = mul i96 %46, %45
  208.   %48 = sub i96 %47, %45
  209.   %49 = srem i96 %48, 3
  210.   %50 = icmp eq i96 %49, 0
  211.   %51 = select i1 %50, i32 3, i32 4
  212.   br label %6
  213.  
  214. ; <label>:52                                      ; preds = %6
  215.   %53 = load i32* @8
  216.   %54 = sub i32 %53, 133972904
  217.   %55 = icmp eq i32 %54, 0
  218.   %56 = select i1 %55, i32 133972904, i32 %54
  219.   store i32 %56, i32* @8
  220.   %57 = load i32* @7
  221.   %58 = add i32 %57, 1245337703
  222.   %59 = icmp eq i32 %58, 0
  223.   %60 = select i1 %59, i32 1245337703, i32 %58
  224.   store i32 %60, i32* @7
  225.   %61 = sext i32 %56 to i64
  226.   %62 = mul i64 %61, %61
  227.   %63 = sub i64 %62, 1
  228.   %64 = srem i64 %61, 2
  229.   %65 = srem i64 %63, 8
  230.   %66 = icmp eq i64 %64, 0
  231.   %67 = icmp eq i64 %65, 0
  232.   %68 = or i1 %66, %67
  233.   %69 = select i1 %68, i32 5, i32 15
  234.   br label %6
  235.  
  236. ; <label>:70                                      ; preds = %6
  237.   %71 = sext i32 %12 to i64
  238.   br label %6
  239.  
  240. ; <label>:72                                      ; preds = %6
  241.   br label %6
  242.  
  243. ; <label>:73                                      ; preds = %6
  244.   %74 = add nsw i64 %8, -1
  245.   %75 = add nsw i32 %7, -1
  246.   %76 = getelementptr inbounds i32* %a, i64 %74
  247.   %77 = load i32* %76, align 4
  248.   %78 = icmp sgt i32 %77, %4
  249.   %79 = select i1 %78, i32 8, i32 10
  250.   br label %6
  251.  
  252. ; <label>:80                                      ; preds = %6
  253.   %81 = load i32* @6
  254.   %82 = mul i32 %81, 1253030161
  255.   %83 = icmp eq i32 %82, 0
  256.   %84 = select i1 %83, i32 1253030161, i32 %82
  257.   store i32 %84, i32* @6
  258.   %85 = load i32* @7
  259.   %86 = mul i32 %85, 1759815901
  260.   %87 = icmp eq i32 %86, 0
  261.   %88 = select i1 %87, i32 1759815901, i32 %86
  262.   store i32 %88, i32* @7
  263.   %89 = sext i32 %84 to i64
  264.   %90 = mul i64 %89, %89
  265.   %91 = sub i64 %90, 1
  266.   %92 = srem i64 %89, 2
  267.   %93 = srem i64 %91, 8
  268.   %94 = icmp eq i64 %92, 0
  269.   %95 = icmp eq i64 %93, 0
  270.   %96 = or i1 %94, %95
  271.   %97 = select i1 %96, i32 9, i32 10
  272.   br label %6
  273.  
  274. ; <label>:98                                      ; preds = %6
  275.   br label %6
  276.  
  277. ; <label>:99                                      ; preds = %6
  278.   %100 = icmp slt i32 %15, %18
  279.   %101 = select i1 %100, i32 11, i32 12
  280.   br label %6
  281.  
  282. ; <label>:102                                     ; preds = %6
  283.   %103 = load i32* %16, align 4
  284.   store i32 %20, i32* %16, align 4
  285.   store i32 %103, i32* %19, align 4
  286.   br label %6
  287.  
  288. ; <label>:104                                     ; preds = %6
  289.   %105 = load i32* @6
  290.   %106 = mul i32 %105, 38380775
  291.   %107 = icmp eq i32 %106, 0
  292.   %108 = select i1 %107, i32 38380775, i32 %106
  293.   store i32 %108, i32* @6
  294.   %109 = load i32* @5
  295.   %110 = add i32 %109, 1170612768
  296.   %111 = icmp eq i32 %110, 0
  297.   %112 = select i1 %111, i32 1170612768, i32 %110
  298.   store i32 %112, i32* @5
  299.   %113 = sext i32 %108 to i64
  300.   %114 = mul i64 %113, %113
  301.   %115 = sub i64 %114, 1
  302.   %116 = srem i64 %113, 2
  303.   %117 = srem i64 %115, 8
  304.   %118 = icmp eq i64 %116, 0
  305.   %119 = icmp eq i64 %117, 0
  306.   %120 = or i1 %118, %119
  307.   %121 = xor i1 %120, true
  308.   %122 = select i1 %121, i32 13, i32 14
  309.   br label %6
  310.  
  311. ; <label>:123                                     ; preds = %6
  312.   %124 = load i32* %3, align 4
  313.   store i32 %20, i32* %3, align 4
  314.   store i32 %124, i32* %19, align 4
  315.   ret i32 %18
  316.  
  317. ; <label>:125                                     ; preds = %6
  318.   %126 = load i32* %3, align 4
  319.   store i32 %20, i32* %3, align 4
  320.   store i32 %126, i32* %19, align 4
  321.   ret i32 %18
  322.  
  323. ; <label>:127                                     ; preds = %6
  324.   %128 = sext i32 %12 to i64
  325.   br label %6
  326. }
  327.  
  328. ; Function Attrs: nounwind
  329. declare i32 @putchar(i32) #1
  330.  
  331. ; Function Attrs: nounwind uwtable
  332. define i32 @foo2(i32* nocapture %a, i32 %l, i32 %r) #0 {
  333.   %1 = bitcast i32 0 to i32
  334.   %2 = sext i32 %l to i64
  335.   %3 = getelementptr inbounds i32* %a, i64 %2
  336.   %4 = load i32* %3, align 4
  337.   %5 = add nsw i32 %r, 1
  338.   br label %6
  339.  
  340. ; <label>:6                                       ; preds = %65, %0
  341.   %7 = phi i32 [ %5, %0 ], [ %42, %65 ]
  342.   %8 = phi i32 [ %l, %0 ], [ %14, %65 ]
  343.   %9 = sext i32 %8 to i64
  344.   br label %10
  345.  
  346. ; <label>:10                                      ; preds = %21, %6
  347.   %11 = phi i32 [ %8, %6 ], [ %14, %21 ]
  348.   %12 = phi i64 [ %9, %6 ], [ %13, %21 ]
  349.   %13 = add nsw i64 %12, 1
  350.   %14 = add nsw i32 %11, 1
  351.   %15 = getelementptr inbounds i32* %a, i64 %13
  352.   %16 = load i32* %15, align 4
  353.   %17 = icmp sle i32 %16, %4
  354.   %18 = trunc i64 %12 to i32
  355.   %19 = icmp slt i32 %18, %r
  356.   %20 = and i1 %17, %19
  357.   br i1 %20, label %21, label %36
  358.  
  359. ; <label>:21                                      ; preds = %10
  360.   %22 = load i32* @6
  361.   %23 = add i32 %22, 534057035
  362.   %24 = icmp eq i32 %23, 0
  363.   %25 = select i1 %24, i32 534057035, i32 %23
  364.   store i32 %25, i32* @6
  365.   %26 = load i32* @7
  366.   %27 = mul i32 %26, 1839115077
  367.   %28 = icmp eq i32 %27, 0
  368.   %29 = select i1 %28, i32 1839115077, i32 %27
  369.   store i32 %29, i32* @7
  370.   %30 = sext i32 %25 to i96
  371.   %31 = mul i96 %30, %30
  372.   %32 = mul i96 %31, %30
  373.   %33 = sub i96 %32, %30
  374.   %34 = srem i96 %33, 3
  375.   %35 = icmp eq i96 %34, 0
  376.   br i1 %35, label %10, label %36
  377.  
  378. ; <label>:36                                      ; preds = %21, %10
  379.   %37 = sext i32 %7 to i64
  380.   br label %38
  381.  
  382. ; <label>:38                                      ; preds = %46, %36
  383.   %39 = phi i32 [ %7, %36 ], [ %42, %46 ]
  384.   %40 = phi i64 [ %37, %36 ], [ %41, %46 ]
  385.   %41 = add nsw i64 %40, -1
  386.   %42 = add nsw i32 %39, -1
  387.   %43 = getelementptr inbounds i32* %a, i64 %41
  388.   %44 = load i32* %43, align 4
  389.   %45 = icmp sgt i32 %44, %4
  390.   br i1 %45, label %46, label %63
  391.  
  392. ; <label>:46                                      ; preds = %38
  393.   %47 = load i32* @6
  394.   %48 = add i32 %47, 756214604
  395.   %49 = icmp eq i32 %48, 0
  396.   %50 = select i1 %49, i32 756214604, i32 %48
  397.   store i32 %50, i32* @6
  398.   %51 = load i32* @7
  399.   %52 = sub i32 %51, 1709956354
  400.   %53 = icmp eq i32 %52, 0
  401.   %54 = select i1 %53, i32 1709956354, i32 %52
  402.   store i32 %54, i32* @7
  403.   %55 = sext i32 %50 to i64
  404.   %56 = mul i64 %55, %55
  405.   %57 = sub i64 %56, 1
  406.   %58 = srem i64 %55, 2
  407.   %59 = srem i64 %57, 8
  408.   %60 = icmp eq i64 %58, 0
  409.   %61 = icmp eq i64 %59, 0
  410.   %62 = or i1 %60, %61
  411.   br i1 %62, label %38, label %63
  412.  
  413. ; <label>:63                                      ; preds = %46, %38
  414.   %64 = icmp slt i32 %14, %42
  415.   br i1 %64, label %65, label %67
  416.  
  417. ; <label>:65                                      ; preds = %63
  418.   %66 = load i32* %15, align 4
  419.   store i32 %44, i32* %15, align 4
  420.   store i32 %66, i32* %43, align 4
  421.   br label %6
  422.  
  423. ; <label>:67                                      ; preds = %63
  424.   %68 = load i32* %3, align 4
  425.   store i32 %44, i32* %3, align 4
  426.   store i32 %68, i32* %43, align 4
  427.   ret i32 %42
  428. }
  429.  
  430. ; Function Attrs: nounwind
  431. declare void @llvm.lifetime.start(i64, i8* nocapture) #1
  432.  
  433. ; Function Attrs: nounwind
  434. declare void @llvm.lifetime.end(i64, i8* nocapture) #1
  435.  
  436. attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
  437. attributes #1 = { nounwind }
  438. attributes #2 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement