1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=a2 < %s | FileCheck %s -check-prefix=INVFUNCDESC 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=a2 -mattr=-invariant-function-descriptors < %s | FileCheck %s -check-prefix=NONINVFUNCDESC 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 4*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 7*9880d681SAndroid Build Coastguard Workerdefine void @bar(void (...)* nocapture %x) #0 { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %callee.knr.cast = bitcast void (...)* %x to void ()* 10*9880d681SAndroid Build Coastguard Worker br label %for.body 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-LABEL: @bar 13*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: ld [[REG1:[0-9]+]], 8(3) 14*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: ld [[REG2:[0-9]+]], 16(3) 15*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: ld [[REG3:[0-9]+]], 0(3) 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC: %for.body 18*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC: std 2, 40(1) 19*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: mtctr [[REG3]] 20*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: mr 11, [[REG2]] 21*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-DAG: mr 2, [[REG1]] 22*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC: bctrl 23*9880d681SAndroid Build Coastguard Worker; INVFUNCDESC-NEXT: ld 2, 40(1) 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC-LABEL: @bar 26*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC: %for.body 27*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC: std 2, 40(1) 28*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC-DAG: ld 3, 0(30) 29*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC-DAG: ld 11, 16(30) 30*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC-DAG: ld 2, 8(30) 31*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC: mtctr 3 32*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC: bctrl 33*9880d681SAndroid Build Coastguard Worker; NONINVFUNCDESC-NEXT: ld 2, 40(1) 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body, %entry 36*9880d681SAndroid Build Coastguard Worker %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 37*9880d681SAndroid Build Coastguard Worker tail call void %callee.knr.cast() #0 38*9880d681SAndroid Build Coastguard Worker %inc = add nuw nsw i32 %i.02, 1 39*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %inc, 1600000000 40*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 43*9880d681SAndroid Build Coastguard Worker ret void 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 47*9880d681SAndroid Build Coastguard Worker 48