1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=ppc64 < %s | FileCheck %s -check-prefix=GENERIC 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=970 < %s | FileCheck %s -check-prefix=PWR 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=a2 < %s | FileCheck %s -check-prefix=BASIC 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=e500mc < %s | FileCheck %s -check-prefix=BASIC 5*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=e5500 < %s | FileCheck %s -check-prefix=BASIC 6*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr4 < %s | FileCheck %s -check-prefix=PWR 7*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr5 < %s | FileCheck %s -check-prefix=PWR 8*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr5x < %s | FileCheck %s -check-prefix=PWR 9*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr6 < %s | FileCheck %s -check-prefix=PWR 10*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr6x < %s | FileCheck %s -check-prefix=PWR 11*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 < %s | FileCheck %s -check-prefix=PWR 12*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 < %s | FileCheck %s -check-prefix=PWR 13*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 14*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 17*9880d681SAndroid Build Coastguard Workerdefine signext i32 @foo(i32 signext %x) #0 { 18*9880d681SAndroid Build Coastguard Workerentry: 19*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i32 %x, 1 20*9880d681SAndroid Build Coastguard Worker ret i32 %mul 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; GENERIC-LABEL: .globl foo 23*9880d681SAndroid Build Coastguard Worker; BASIC-LABEL: .globl foo 24*9880d681SAndroid Build Coastguard Worker; PWR-LABEL: .globl foo 25*9880d681SAndroid Build Coastguard Worker; GENERIC: .p2align 2 26*9880d681SAndroid Build Coastguard Worker; BASIC: .p2align 4 27*9880d681SAndroid Build Coastguard Worker; PWR: .p2align 4 28*9880d681SAndroid Build Coastguard Worker; GENERIC: @foo 29*9880d681SAndroid Build Coastguard Worker; BASIC: @foo 30*9880d681SAndroid Build Coastguard Worker; PWR: @foo 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 34*9880d681SAndroid Build Coastguard Workerdefine void @loop(i32 signext %x, i32* nocapture %a) #1 { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker br label %vector.body 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; GENERIC-LABEL: @loop 39*9880d681SAndroid Build Coastguard Worker; BASIC-LABEL: @loop 40*9880d681SAndroid Build Coastguard Worker; PWR-LABEL: @loop 41*9880d681SAndroid Build Coastguard Worker; GENERIC: mtctr 42*9880d681SAndroid Build Coastguard Worker; BASIC: mtctr 43*9880d681SAndroid Build Coastguard Worker; PWR: mtctr 44*9880d681SAndroid Build Coastguard Worker; GENERIC-NOT: .p2align 45*9880d681SAndroid Build Coastguard Worker; BASIC: .p2align 4 46*9880d681SAndroid Build Coastguard Worker; PWR: .p2align 4 47*9880d681SAndroid Build Coastguard Worker; GENERIC: lwzu 48*9880d681SAndroid Build Coastguard Worker; BASIC: lwzu 49*9880d681SAndroid Build Coastguard Worker; PWR: lwzu 50*9880d681SAndroid Build Coastguard Worker; GENERIC: bdnz 51*9880d681SAndroid Build Coastguard Worker; BASIC: bdnz 52*9880d681SAndroid Build Coastguard Worker; PWR: bdnz 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workervector.body: ; preds = %vector.body, %entry 55*9880d681SAndroid Build Coastguard Worker %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ] 56*9880d681SAndroid Build Coastguard Worker %induction45 = or i64 %index, 1 57*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds i32, i32* %a, i64 %index 58*9880d681SAndroid Build Coastguard Worker %1 = getelementptr inbounds i32, i32* %a, i64 %induction45 59*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %0, align 4 60*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* %1, align 4 61*9880d681SAndroid Build Coastguard Worker %4 = add nsw i32 %2, 4 62*9880d681SAndroid Build Coastguard Worker %5 = add nsw i32 %3, 4 63*9880d681SAndroid Build Coastguard Worker %6 = mul nsw i32 %4, 3 64*9880d681SAndroid Build Coastguard Worker %7 = mul nsw i32 %5, 3 65*9880d681SAndroid Build Coastguard Worker store i32 %6, i32* %0, align 4 66*9880d681SAndroid Build Coastguard Worker store i32 %7, i32* %1, align 4 67*9880d681SAndroid Build Coastguard Worker %index.next = add i64 %index, 2 68*9880d681SAndroid Build Coastguard Worker %8 = icmp eq i64 %index.next, 2048 69*9880d681SAndroid Build Coastguard Worker br i1 %8, label %for.end, label %vector.body 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %vector.body 72*9880d681SAndroid Build Coastguard Worker ret void 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 76*9880d681SAndroid Build Coastguard Workerdefine void @sloop(i32 signext %x, i32* nocapture %a) #1 { 77*9880d681SAndroid Build Coastguard Workerentry: 78*9880d681SAndroid Build Coastguard Worker br label %for.body 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; GENERIC-LABEL: @sloop 81*9880d681SAndroid Build Coastguard Worker; BASIC-LABEL: @sloop 82*9880d681SAndroid Build Coastguard Worker; PWR-LABEL: @sloop 83*9880d681SAndroid Build Coastguard Worker; GENERIC: mtctr 84*9880d681SAndroid Build Coastguard Worker; BASIC: mtctr 85*9880d681SAndroid Build Coastguard Worker; PWR: mtctr 86*9880d681SAndroid Build Coastguard Worker; GENERIC-NOT: .p2align 87*9880d681SAndroid Build Coastguard Worker; BASIC: .p2align 4 88*9880d681SAndroid Build Coastguard Worker; PWR: .p2align 5 89*9880d681SAndroid Build Coastguard Worker; GENERIC: bdnz 90*9880d681SAndroid Build Coastguard Worker; BASIC: bdnz 91*9880d681SAndroid Build Coastguard Worker; PWR: bdnz 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 94*9880d681SAndroid Build Coastguard Worker %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 95*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv 96*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx, align 4 97*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %0, 4 98*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i32 %add, 3 99*9880d681SAndroid Build Coastguard Worker store i32 %mul, i32* %arrayidx, align 4 100*9880d681SAndroid Build Coastguard Worker %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 101*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i64 %indvars.iv.next, 2048 102*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 105*9880d681SAndroid Build Coastguard Worker ret void 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 109*9880d681SAndroid Build Coastguard Workerdefine void @test_minsize(i32 signext %x, i32* nocapture %a) #2 { 110*9880d681SAndroid Build Coastguard Workerentry: 111*9880d681SAndroid Build Coastguard Worker br label %vector.body 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; GENERIC-LABEL: @test_minsize 114*9880d681SAndroid Build Coastguard Worker; BASIC-LABEL: @test_minsize 115*9880d681SAndroid Build Coastguard Worker; PWR-LABEL: @test_minsize 116*9880d681SAndroid Build Coastguard Worker; GENERIC: mtctr 117*9880d681SAndroid Build Coastguard Worker; BASIC: mtctr 118*9880d681SAndroid Build Coastguard Worker; PWR: mtctr 119*9880d681SAndroid Build Coastguard Worker; GENERIC-NOT: .p2align 120*9880d681SAndroid Build Coastguard Worker; BASIC-NOT: .p2align 121*9880d681SAndroid Build Coastguard Worker; PWR-NOT: .p2align 122*9880d681SAndroid Build Coastguard Worker; GENERIC: lwzu 123*9880d681SAndroid Build Coastguard Worker; BASIC: lwzu 124*9880d681SAndroid Build Coastguard Worker; PWR: lwzu 125*9880d681SAndroid Build Coastguard Worker; GENERIC: bdnz 126*9880d681SAndroid Build Coastguard Worker; BASIC: bdnz 127*9880d681SAndroid Build Coastguard Worker; PWR: bdnz 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workervector.body: ; preds = %vector.body, %entry 130*9880d681SAndroid Build Coastguard Worker %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ] 131*9880d681SAndroid Build Coastguard Worker %induction45 = or i64 %index, 1 132*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds i32, i32* %a, i64 %index 133*9880d681SAndroid Build Coastguard Worker %1 = getelementptr inbounds i32, i32* %a, i64 %induction45 134*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %0, align 4 135*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* %1, align 4 136*9880d681SAndroid Build Coastguard Worker %4 = add nsw i32 %2, 4 137*9880d681SAndroid Build Coastguard Worker %5 = add nsw i32 %3, 4 138*9880d681SAndroid Build Coastguard Worker %6 = mul nsw i32 %4, 3 139*9880d681SAndroid Build Coastguard Worker %7 = mul nsw i32 %5, 3 140*9880d681SAndroid Build Coastguard Worker store i32 %6, i32* %0, align 4 141*9880d681SAndroid Build Coastguard Worker store i32 %7, i32* %1, align 4 142*9880d681SAndroid Build Coastguard Worker %index.next = add i64 %index, 2 143*9880d681SAndroid Build Coastguard Worker %8 = icmp eq i64 %index.next, 2048 144*9880d681SAndroid Build Coastguard Worker br i1 %8, label %for.end, label %vector.body 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %vector.body 147*9880d681SAndroid Build Coastguard Worker ret void 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 150*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind } 151*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind minsize} 152*9880d681SAndroid Build Coastguard Worker 153