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