1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10.0 -relocation-model=pic -disable-fp-elim -stats |& grep {Number of registers downgraded}
4 ; Test if linearscan is unfavoring registers for allocation to allow more reuse
5 ; of reloads from stack slots.
7 %struct.SHA_CTX = type { i32, i32, i32, i32, i32, i32, i32, [16 x i32], i32 }
9 define fastcc void @sha1_block_data_order(%struct.SHA_CTX* nocapture %c, i8* %p, i64 %num) nounwind {
13 bb: ; preds = %bb, %entry
14 %asmtmp511 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 0) nounwind ; <i32> [#uses=3]
15 %asmtmp513 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 0) nounwind ; <i32> [#uses=2]
16 %asmtmp516 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 0) nounwind ; <i32> [#uses=1]
17 %asmtmp517 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 0) nounwind ; <i32> [#uses=2]
18 %0 = xor i32 0, %asmtmp513 ; <i32> [#uses=0]
19 %1 = add i32 0, %asmtmp517 ; <i32> [#uses=1]
20 %2 = add i32 %1, 0 ; <i32> [#uses=1]
21 %3 = add i32 %2, 0 ; <i32> [#uses=1]
22 %asmtmp519 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 0) nounwind ; <i32> [#uses=1]
23 %4 = xor i32 0, %asmtmp511 ; <i32> [#uses=1]
24 %asmtmp520 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %4) nounwind ; <i32> [#uses=2]
25 %5 = xor i32 0, %asmtmp516 ; <i32> [#uses=1]
26 %6 = xor i32 %5, %asmtmp519 ; <i32> [#uses=1]
27 %7 = add i32 %asmtmp513, -899497514 ; <i32> [#uses=1]
28 %8 = add i32 %7, %asmtmp520 ; <i32> [#uses=1]
29 %9 = add i32 %8, %6 ; <i32> [#uses=1]
30 %10 = add i32 %9, 0 ; <i32> [#uses=1]
31 %asmtmp523 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 0) nounwind ; <i32> [#uses=1]
32 %asmtmp525 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %3) nounwind ; <i32> [#uses=2]
33 %11 = xor i32 0, %asmtmp525 ; <i32> [#uses=1]
34 %12 = add i32 0, %11 ; <i32> [#uses=1]
35 %13 = add i32 %12, 0 ; <i32> [#uses=2]
36 %asmtmp528 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %10) nounwind ; <i32> [#uses=1]
37 %14 = xor i32 0, %asmtmp520 ; <i32> [#uses=1]
38 %asmtmp529 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %14) nounwind ; <i32> [#uses=1]
39 %asmtmp530 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 5, i32 %13) nounwind ; <i32> [#uses=1]
40 %15 = add i32 0, %asmtmp530 ; <i32> [#uses=1]
41 %16 = xor i32 0, %asmtmp523 ; <i32> [#uses=1]
42 %asmtmp532 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %16) nounwind ; <i32> [#uses=2]
43 %asmtmp533 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 5, i32 %15) nounwind ; <i32> [#uses=1]
44 %17 = xor i32 %13, %asmtmp528 ; <i32> [#uses=1]
45 %18 = xor i32 %17, 0 ; <i32> [#uses=1]
46 %19 = add i32 %asmtmp525, -899497514 ; <i32> [#uses=1]
47 %20 = add i32 %19, %asmtmp532 ; <i32> [#uses=1]
48 %21 = add i32 %20, %18 ; <i32> [#uses=1]
49 %22 = add i32 %21, %asmtmp533 ; <i32> [#uses=1]
50 %23 = xor i32 0, %asmtmp511 ; <i32> [#uses=1]
51 %24 = xor i32 %23, 0 ; <i32> [#uses=1]
52 %asmtmp535 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %24) nounwind ; <i32> [#uses=3]
53 %25 = add i32 0, %asmtmp535 ; <i32> [#uses=1]
54 %26 = add i32 %25, 0 ; <i32> [#uses=1]
55 %27 = add i32 %26, 0 ; <i32> [#uses=1]
56 %28 = xor i32 0, %asmtmp529 ; <i32> [#uses=0]
57 %29 = xor i32 %22, 0 ; <i32> [#uses=1]
58 %30 = xor i32 %29, 0 ; <i32> [#uses=1]
59 %31 = add i32 0, %30 ; <i32> [#uses=1]
60 %32 = add i32 %31, 0 ; <i32> [#uses=3]
61 %asmtmp541 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 0) nounwind ; <i32> [#uses=2]
62 %asmtmp542 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 5, i32 %32) nounwind ; <i32> [#uses=1]
63 %33 = add i32 0, %asmtmp541 ; <i32> [#uses=1]
64 %34 = add i32 %33, 0 ; <i32> [#uses=1]
65 %35 = add i32 %34, %asmtmp542 ; <i32> [#uses=1]
66 %asmtmp543 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %27) nounwind ; <i32> [#uses=2]
67 %36 = xor i32 0, %asmtmp535 ; <i32> [#uses=0]
68 %37 = xor i32 %32, 0 ; <i32> [#uses=1]
69 %38 = xor i32 %37, %asmtmp543 ; <i32> [#uses=1]
70 %39 = add i32 0, %38 ; <i32> [#uses=1]
71 %40 = add i32 %39, 0 ; <i32> [#uses=2]
72 %asmtmp546 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %32) nounwind ; <i32> [#uses=1]
73 %asmtmp547 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 0) nounwind ; <i32> [#uses=2]
74 %41 = add i32 0, -899497514 ; <i32> [#uses=1]
75 %42 = add i32 %41, %asmtmp547 ; <i32> [#uses=1]
76 %43 = add i32 %42, 0 ; <i32> [#uses=1]
77 %44 = add i32 %43, 0 ; <i32> [#uses=3]
78 %asmtmp549 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %35) nounwind ; <i32> [#uses=2]
79 %45 = xor i32 0, %asmtmp541 ; <i32> [#uses=1]
80 %asmtmp550 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %45) nounwind ; <i32> [#uses=2]
81 %asmtmp551 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 5, i32 %44) nounwind ; <i32> [#uses=1]
82 %46 = xor i32 %40, %asmtmp546 ; <i32> [#uses=1]
83 %47 = xor i32 %46, %asmtmp549 ; <i32> [#uses=1]
84 %48 = add i32 %asmtmp543, -899497514 ; <i32> [#uses=1]
85 %49 = add i32 %48, %asmtmp550 ; <i32> [#uses=1]
86 %50 = add i32 %49, %47 ; <i32> [#uses=1]
87 %51 = add i32 %50, %asmtmp551 ; <i32> [#uses=1]
88 %asmtmp552 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %40) nounwind ; <i32> [#uses=2]
89 %52 = xor i32 %44, %asmtmp549 ; <i32> [#uses=1]
90 %53 = xor i32 %52, %asmtmp552 ; <i32> [#uses=1]
91 %54 = add i32 0, %53 ; <i32> [#uses=1]
92 %55 = add i32 %54, 0 ; <i32> [#uses=2]
93 %asmtmp555 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %44) nounwind ; <i32> [#uses=2]
94 %56 = xor i32 0, %asmtmp532 ; <i32> [#uses=1]
95 %57 = xor i32 %56, %asmtmp547 ; <i32> [#uses=1]
96 %asmtmp556 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %57) nounwind ; <i32> [#uses=1]
97 %58 = add i32 0, %asmtmp556 ; <i32> [#uses=1]
98 %59 = add i32 %58, 0 ; <i32> [#uses=1]
99 %60 = add i32 %59, 0 ; <i32> [#uses=1]
100 %asmtmp558 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %51) nounwind ; <i32> [#uses=1]
101 %61 = xor i32 %asmtmp517, %asmtmp511 ; <i32> [#uses=1]
102 %62 = xor i32 %61, %asmtmp535 ; <i32> [#uses=1]
103 %63 = xor i32 %62, %asmtmp550 ; <i32> [#uses=1]
104 %asmtmp559 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 1, i32 %63) nounwind ; <i32> [#uses=1]
105 %64 = xor i32 %55, %asmtmp555 ; <i32> [#uses=1]
106 %65 = xor i32 %64, %asmtmp558 ; <i32> [#uses=1]
107 %asmtmp561 = tail call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 30, i32 %55) nounwind ; <i32> [#uses=1]
108 %66 = add i32 %asmtmp552, -899497514 ; <i32> [#uses=1]
109 %67 = add i32 %66, %65 ; <i32> [#uses=1]
110 %68 = add i32 %67, %asmtmp559 ; <i32> [#uses=1]
111 %69 = add i32 %68, 0 ; <i32> [#uses=1]
112 %70 = add i32 %69, 0 ; <i32> [#uses=1]
113 store i32 %70, i32* null, align 4
114 %71 = add i32 0, %60 ; <i32> [#uses=1]
115 store i32 %71, i32* null, align 4
116 %72 = add i32 0, %asmtmp561 ; <i32> [#uses=1]
117 store i32 %72, i32* null, align 4
118 %73 = add i32 0, %asmtmp555 ; <i32> [#uses=1]
119 store i32 %73, i32* null, align 4