xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/2009-04-16-SpillerUnfold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10.0 -relocation-model=pic -disable-fp-elim -stats 2>&1 | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker; XFAIL: *
4*9880d681SAndroid Build Coastguard Worker; 69408 removed the opportunity for this optimization to work
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK: {{Number of modref unfolded}}
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker	%struct.SHA512_CTX = type { [8 x i64], i64, i64, %struct.anon, i32, i32 }
9*9880d681SAndroid Build Coastguard Worker	%struct.anon = type { [16 x i64] }
10*9880d681SAndroid Build Coastguard Worker@K512 = external constant [80 x i64], align 32		; <[80 x i64]*> [#uses=2]
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine fastcc void @sha512_block_data_order(%struct.SHA512_CTX* nocapture %ctx, i8* nocapture %in, i64 %num) nounwind ssp {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker	br label %bb349
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerbb349:		; preds = %bb349, %entry
17*9880d681SAndroid Build Coastguard Worker	%e.0489 = phi i64 [ 0, %entry ], [ %e.0, %bb349 ]		; <i64> [#uses=3]
18*9880d681SAndroid Build Coastguard Worker	%b.0472 = phi i64 [ 0, %entry ], [ %87, %bb349 ]		; <i64> [#uses=2]
19*9880d681SAndroid Build Coastguard Worker	%asmtmp356 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 41, i64 %e.0489) nounwind		; <i64> [#uses=1]
20*9880d681SAndroid Build Coastguard Worker	%0 = xor i64 0, %asmtmp356		; <i64> [#uses=1]
21*9880d681SAndroid Build Coastguard Worker	%1 = add i64 0, %0		; <i64> [#uses=1]
22*9880d681SAndroid Build Coastguard Worker	%2 = add i64 %1, 0		; <i64> [#uses=1]
23*9880d681SAndroid Build Coastguard Worker	%3 = add i64 %2, 0		; <i64> [#uses=1]
24*9880d681SAndroid Build Coastguard Worker	%4 = add i64 %3, 0		; <i64> [#uses=5]
25*9880d681SAndroid Build Coastguard Worker	%asmtmp372 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 34, i64 %4) nounwind		; <i64> [#uses=1]
26*9880d681SAndroid Build Coastguard Worker	%asmtmp373 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 39, i64 %4) nounwind		; <i64> [#uses=0]
27*9880d681SAndroid Build Coastguard Worker	%5 = xor i64 %asmtmp372, 0		; <i64> [#uses=0]
28*9880d681SAndroid Build Coastguard Worker	%6 = xor i64 0, %b.0472		; <i64> [#uses=1]
29*9880d681SAndroid Build Coastguard Worker	%7 = and i64 %4, %6		; <i64> [#uses=1]
30*9880d681SAndroid Build Coastguard Worker	%8 = xor i64 %7, 0		; <i64> [#uses=1]
31*9880d681SAndroid Build Coastguard Worker	%9 = add i64 0, %8		; <i64> [#uses=1]
32*9880d681SAndroid Build Coastguard Worker	%10 = add i64 %9, 0		; <i64> [#uses=2]
33*9880d681SAndroid Build Coastguard Worker	%asmtmp377 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 61, i64 0) nounwind		; <i64> [#uses=1]
34*9880d681SAndroid Build Coastguard Worker	%11 = xor i64 0, %asmtmp377		; <i64> [#uses=1]
35*9880d681SAndroid Build Coastguard Worker	%12 = add i64 0, %11		; <i64> [#uses=1]
36*9880d681SAndroid Build Coastguard Worker	%13 = add i64 %12, 0		; <i64> [#uses=1]
37*9880d681SAndroid Build Coastguard Worker	%not381 = xor i64 0, -1		; <i64> [#uses=1]
38*9880d681SAndroid Build Coastguard Worker	%14 = and i64 %e.0489, %not381		; <i64> [#uses=1]
39*9880d681SAndroid Build Coastguard Worker	%15 = xor i64 0, %14		; <i64> [#uses=1]
40*9880d681SAndroid Build Coastguard Worker	%16 = add i64 %15, 0		; <i64> [#uses=1]
41*9880d681SAndroid Build Coastguard Worker	%17 = add i64 %16, %13		; <i64> [#uses=1]
42*9880d681SAndroid Build Coastguard Worker	%18 = add i64 %17, 0		; <i64> [#uses=1]
43*9880d681SAndroid Build Coastguard Worker	%19 = add i64 %18, 0		; <i64> [#uses=2]
44*9880d681SAndroid Build Coastguard Worker	%20 = add i64 %19, %b.0472		; <i64> [#uses=3]
45*9880d681SAndroid Build Coastguard Worker	%21 = add i64 %19, 0		; <i64> [#uses=1]
46*9880d681SAndroid Build Coastguard Worker	%22 = add i64 %21, 0		; <i64> [#uses=1]
47*9880d681SAndroid Build Coastguard Worker	%23 = add i32 0, 12		; <i32> [#uses=1]
48*9880d681SAndroid Build Coastguard Worker	%24 = and i32 %23, 12		; <i32> [#uses=1]
49*9880d681SAndroid Build Coastguard Worker	%25 = zext i32 %24 to i64		; <i64> [#uses=1]
50*9880d681SAndroid Build Coastguard Worker	%26 = getelementptr [16 x i64], [16 x i64]* null, i64 0, i64 %25		; <i64*> [#uses=0]
51*9880d681SAndroid Build Coastguard Worker	%27 = add i64 0, %e.0489		; <i64> [#uses=1]
52*9880d681SAndroid Build Coastguard Worker	%28 = add i64 %27, 0		; <i64> [#uses=1]
53*9880d681SAndroid Build Coastguard Worker	%29 = add i64 %28, 0		; <i64> [#uses=1]
54*9880d681SAndroid Build Coastguard Worker	%30 = add i64 %29, 0		; <i64> [#uses=2]
55*9880d681SAndroid Build Coastguard Worker	%31 = and i64 %10, %4		; <i64> [#uses=1]
56*9880d681SAndroid Build Coastguard Worker	%32 = xor i64 0, %31		; <i64> [#uses=1]
57*9880d681SAndroid Build Coastguard Worker	%33 = add i64 %30, 0		; <i64> [#uses=3]
58*9880d681SAndroid Build Coastguard Worker	%34 = add i64 %30, %32		; <i64> [#uses=1]
59*9880d681SAndroid Build Coastguard Worker	%35 = add i64 %34, 0		; <i64> [#uses=1]
60*9880d681SAndroid Build Coastguard Worker	%36 = and i64 %33, %20		; <i64> [#uses=1]
61*9880d681SAndroid Build Coastguard Worker	%37 = xor i64 %36, 0		; <i64> [#uses=1]
62*9880d681SAndroid Build Coastguard Worker	%38 = add i64 %37, 0		; <i64> [#uses=1]
63*9880d681SAndroid Build Coastguard Worker	%39 = add i64 %38, 0		; <i64> [#uses=1]
64*9880d681SAndroid Build Coastguard Worker	%40 = add i64 %39, 0		; <i64> [#uses=1]
65*9880d681SAndroid Build Coastguard Worker	%41 = add i64 %40, 0		; <i64> [#uses=1]
66*9880d681SAndroid Build Coastguard Worker	%42 = add i64 %41, %4		; <i64> [#uses=3]
67*9880d681SAndroid Build Coastguard Worker	%43 = or i32 0, 6		; <i32> [#uses=1]
68*9880d681SAndroid Build Coastguard Worker	%44 = and i32 %43, 14		; <i32> [#uses=1]
69*9880d681SAndroid Build Coastguard Worker	%45 = zext i32 %44 to i64		; <i64> [#uses=1]
70*9880d681SAndroid Build Coastguard Worker	%46 = getelementptr [16 x i64], [16 x i64]* null, i64 0, i64 %45		; <i64*> [#uses=1]
71*9880d681SAndroid Build Coastguard Worker	%not417 = xor i64 %42, -1		; <i64> [#uses=1]
72*9880d681SAndroid Build Coastguard Worker	%47 = and i64 %20, %not417		; <i64> [#uses=1]
73*9880d681SAndroid Build Coastguard Worker	%48 = xor i64 0, %47		; <i64> [#uses=1]
74*9880d681SAndroid Build Coastguard Worker	%49 = getelementptr [80 x i64], [80 x i64]* @K512, i64 0, i64 0		; <i64*> [#uses=1]
75*9880d681SAndroid Build Coastguard Worker	%50 = load i64, i64* %49, align 8		; <i64> [#uses=1]
76*9880d681SAndroid Build Coastguard Worker	%51 = add i64 %48, 0		; <i64> [#uses=1]
77*9880d681SAndroid Build Coastguard Worker	%52 = add i64 %51, 0		; <i64> [#uses=1]
78*9880d681SAndroid Build Coastguard Worker	%53 = add i64 %52, 0		; <i64> [#uses=1]
79*9880d681SAndroid Build Coastguard Worker	%54 = add i64 %53, %50		; <i64> [#uses=2]
80*9880d681SAndroid Build Coastguard Worker	%asmtmp420 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 34, i64 0) nounwind		; <i64> [#uses=1]
81*9880d681SAndroid Build Coastguard Worker	%asmtmp421 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 39, i64 0) nounwind		; <i64> [#uses=1]
82*9880d681SAndroid Build Coastguard Worker	%55 = xor i64 %asmtmp420, 0		; <i64> [#uses=1]
83*9880d681SAndroid Build Coastguard Worker	%56 = xor i64 %55, %asmtmp421		; <i64> [#uses=1]
84*9880d681SAndroid Build Coastguard Worker	%57 = add i64 %54, %10		; <i64> [#uses=5]
85*9880d681SAndroid Build Coastguard Worker	%58 = add i64 %54, 0		; <i64> [#uses=1]
86*9880d681SAndroid Build Coastguard Worker	%59 = add i64 %58, %56		; <i64> [#uses=2]
87*9880d681SAndroid Build Coastguard Worker	%60 = or i32 0, 7		; <i32> [#uses=1]
88*9880d681SAndroid Build Coastguard Worker	%61 = and i32 %60, 15		; <i32> [#uses=1]
89*9880d681SAndroid Build Coastguard Worker	%62 = zext i32 %61 to i64		; <i64> [#uses=1]
90*9880d681SAndroid Build Coastguard Worker	%63 = getelementptr [16 x i64], [16 x i64]* null, i64 0, i64 %62		; <i64*> [#uses=2]
91*9880d681SAndroid Build Coastguard Worker	%64 = load i64, i64* null, align 8		; <i64> [#uses=1]
92*9880d681SAndroid Build Coastguard Worker	%65 = lshr i64 %64, 6		; <i64> [#uses=1]
93*9880d681SAndroid Build Coastguard Worker	%66 = xor i64 0, %65		; <i64> [#uses=1]
94*9880d681SAndroid Build Coastguard Worker	%67 = xor i64 %66, 0		; <i64> [#uses=1]
95*9880d681SAndroid Build Coastguard Worker	%68 = load i64, i64* %46, align 8		; <i64> [#uses=1]
96*9880d681SAndroid Build Coastguard Worker	%69 = load i64, i64* null, align 8		; <i64> [#uses=1]
97*9880d681SAndroid Build Coastguard Worker	%70 = add i64 %68, 0		; <i64> [#uses=1]
98*9880d681SAndroid Build Coastguard Worker	%71 = add i64 %70, %67		; <i64> [#uses=1]
99*9880d681SAndroid Build Coastguard Worker	%72 = add i64 %71, %69		; <i64> [#uses=1]
100*9880d681SAndroid Build Coastguard Worker	%asmtmp427 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 18, i64 %57) nounwind		; <i64> [#uses=1]
101*9880d681SAndroid Build Coastguard Worker	%asmtmp428 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 41, i64 %57) nounwind		; <i64> [#uses=1]
102*9880d681SAndroid Build Coastguard Worker	%73 = xor i64 %asmtmp427, 0		; <i64> [#uses=1]
103*9880d681SAndroid Build Coastguard Worker	%74 = xor i64 %73, %asmtmp428		; <i64> [#uses=1]
104*9880d681SAndroid Build Coastguard Worker	%75 = and i64 %57, %42		; <i64> [#uses=1]
105*9880d681SAndroid Build Coastguard Worker	%not429 = xor i64 %57, -1		; <i64> [#uses=1]
106*9880d681SAndroid Build Coastguard Worker	%76 = and i64 %33, %not429		; <i64> [#uses=1]
107*9880d681SAndroid Build Coastguard Worker	%77 = xor i64 %75, %76		; <i64> [#uses=1]
108*9880d681SAndroid Build Coastguard Worker	%78 = getelementptr [80 x i64], [80 x i64]* @K512, i64 0, i64 0		; <i64*> [#uses=1]
109*9880d681SAndroid Build Coastguard Worker	%79 = load i64, i64* %78, align 16		; <i64> [#uses=1]
110*9880d681SAndroid Build Coastguard Worker	%80 = add i64 %77, %20		; <i64> [#uses=1]
111*9880d681SAndroid Build Coastguard Worker	%81 = add i64 %80, %72		; <i64> [#uses=1]
112*9880d681SAndroid Build Coastguard Worker	%82 = add i64 %81, %74		; <i64> [#uses=1]
113*9880d681SAndroid Build Coastguard Worker	%83 = add i64 %82, %79		; <i64> [#uses=1]
114*9880d681SAndroid Build Coastguard Worker	%asmtmp432 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 34, i64 %59) nounwind		; <i64> [#uses=1]
115*9880d681SAndroid Build Coastguard Worker	%asmtmp433 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 39, i64 %59) nounwind		; <i64> [#uses=1]
116*9880d681SAndroid Build Coastguard Worker	%84 = xor i64 %asmtmp432, 0		; <i64> [#uses=1]
117*9880d681SAndroid Build Coastguard Worker	%85 = xor i64 %84, %asmtmp433		; <i64> [#uses=1]
118*9880d681SAndroid Build Coastguard Worker	%86 = add i64 %83, %22		; <i64> [#uses=2]
119*9880d681SAndroid Build Coastguard Worker	%87 = add i64 0, %85		; <i64> [#uses=1]
120*9880d681SAndroid Build Coastguard Worker	%asmtmp435 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 8, i64 0) nounwind		; <i64> [#uses=1]
121*9880d681SAndroid Build Coastguard Worker	%88 = xor i64 0, %asmtmp435		; <i64> [#uses=1]
122*9880d681SAndroid Build Coastguard Worker	%89 = load i64, i64* null, align 8		; <i64> [#uses=3]
123*9880d681SAndroid Build Coastguard Worker	%asmtmp436 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 19, i64 %89) nounwind		; <i64> [#uses=1]
124*9880d681SAndroid Build Coastguard Worker	%asmtmp437 = call i64 asm "rorq $1,$0", "=r,J,0,~{dirflag},~{fpsr},~{flags},~{cc}"(i32 61, i64 %89) nounwind		; <i64> [#uses=1]
125*9880d681SAndroid Build Coastguard Worker	%90 = lshr i64 %89, 6		; <i64> [#uses=1]
126*9880d681SAndroid Build Coastguard Worker	%91 = xor i64 %asmtmp436, %90		; <i64> [#uses=1]
127*9880d681SAndroid Build Coastguard Worker	%92 = xor i64 %91, %asmtmp437		; <i64> [#uses=1]
128*9880d681SAndroid Build Coastguard Worker	%93 = load i64, i64* %63, align 8		; <i64> [#uses=1]
129*9880d681SAndroid Build Coastguard Worker	%94 = load i64, i64* null, align 8		; <i64> [#uses=1]
130*9880d681SAndroid Build Coastguard Worker	%95 = add i64 %93, %88		; <i64> [#uses=1]
131*9880d681SAndroid Build Coastguard Worker	%96 = add i64 %95, %92		; <i64> [#uses=1]
132*9880d681SAndroid Build Coastguard Worker	%97 = add i64 %96, %94		; <i64> [#uses=2]
133*9880d681SAndroid Build Coastguard Worker	store i64 %97, i64* %63, align 8
134*9880d681SAndroid Build Coastguard Worker	%98 = and i64 %86, %57		; <i64> [#uses=1]
135*9880d681SAndroid Build Coastguard Worker	%not441 = xor i64 %86, -1		; <i64> [#uses=1]
136*9880d681SAndroid Build Coastguard Worker	%99 = and i64 %42, %not441		; <i64> [#uses=1]
137*9880d681SAndroid Build Coastguard Worker	%100 = xor i64 %98, %99		; <i64> [#uses=1]
138*9880d681SAndroid Build Coastguard Worker	%101 = add i64 %100, %33		; <i64> [#uses=1]
139*9880d681SAndroid Build Coastguard Worker	%102 = add i64 %101, %97		; <i64> [#uses=1]
140*9880d681SAndroid Build Coastguard Worker	%103 = add i64 %102, 0		; <i64> [#uses=1]
141*9880d681SAndroid Build Coastguard Worker	%104 = add i64 %103, 0		; <i64> [#uses=1]
142*9880d681SAndroid Build Coastguard Worker	%e.0 = add i64 %104, %35		; <i64> [#uses=1]
143*9880d681SAndroid Build Coastguard Worker	br label %bb349
144*9880d681SAndroid Build Coastguard Worker}
145