1710923cdSTing Wang# RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu \ 2f908cbc3STing Wang# RUN: -run-pass=early-tailduplication,ppc-ctrloops %s -o - -verify-machineinstrs 2>&1 | FileCheck %s 3f908cbc3STing Wang 4f908cbc3STing Wang--- | 5f908cbc3STing Wang target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512" 6f908cbc3STing Wang target triple = "powerpc64le-unknown-linux-gnu" 7f908cbc3STing Wang 8f908cbc3STing Wang define dso_local void @test() local_unnamed_addr #0 { 9f908cbc3STing Wang test_entry: 10*60442f0dSNikita Popov %_val_domain_ = load i32, ptr undef, align 4 11f908cbc3STing Wang %_conv765 = sext i32 %_val_domain_ to i64 12f908cbc3STing Wang br i1 undef, label %_label_42, label %_loop_40_loopHeader_ 13f908cbc3STing Wang 14f908cbc3STing Wang _loop_40_loopHeader_: ; preds = %test_entry 15*60442f0dSNikita Popov %_val_flags_1020 = load i32, ptr undef, align 4 16f908cbc3STing Wang %0 = and i32 %_val_flags_1020, 1 17f908cbc3STing Wang %_cond_conv_1022.not = icmp eq i32 %0, 0 18f908cbc3STing Wang %1 = sub i64 1, %_conv765 19f908cbc3STing Wang %smax = call i64 @llvm.smax.i64(i64 %1, i64 1) 20f908cbc3STing Wang br label %_label_43 21f908cbc3STing Wang 22f908cbc3STing Wang _label_43.loopexit: ; preds = %_loop_44_loopHeader_ 23f908cbc3STing Wang %lsr.iv.next = add i64 %lsr.iv, -1 24f908cbc3STing Wang br label %_label_43 25f908cbc3STing Wang 26f908cbc3STing Wang _label_43: ; preds = %_label_43.loopexit, %_loop_40_loopHeader_ 27f908cbc3STing Wang %lsr.iv = phi i64 [ %lsr.iv.next, %_label_43.loopexit ], [ undef, %_loop_40_loopHeader_ ] 28f908cbc3STing Wang call void @llvm.set.loop.iterations.i64(i64 %smax) 29f908cbc3STing Wang br label %_loop_44_do_ 30f908cbc3STing Wang 31f908cbc3STing Wang _loop_44_loopHeader_: ; preds = %_loop_44_do_ 32f908cbc3STing Wang %2 = call i1 @llvm.loop.decrement.i64(i64 1) 33f908cbc3STing Wang br i1 %2, label %_loop_44_do_, label %_label_43.loopexit 34f908cbc3STing Wang 35f908cbc3STing Wang _loop_44_do_: ; preds = %_loop_44_loopHeader_, %_label_43 36f908cbc3STing Wang br i1 %_cond_conv_1022.not, label %_label_42.loopexit, label %_loop_44_loopHeader_ 37f908cbc3STing Wang 38f908cbc3STing Wang _label_42.loopexit: ; preds = %_loop_44_do_ 39f908cbc3STing Wang %3 = trunc i64 %lsr.iv to i32 40*60442f0dSNikita Popov store i32 %3, ptr undef, align 4 41f908cbc3STing Wang unreachable 42f908cbc3STing Wang 43f908cbc3STing Wang _label_42: ; preds = %test_entry 44f908cbc3STing Wang unreachable 45f908cbc3STing Wang } 46f908cbc3STing Wang 47f908cbc3STing Wang ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn 48f908cbc3STing Wang declare i64 @llvm.smax.i64(i64, i64) #1 49f908cbc3STing Wang 50f908cbc3STing Wang ; Function Attrs: nocallback noduplicate nofree nosync nounwind willreturn 51f908cbc3STing Wang declare void @llvm.set.loop.iterations.i64(i64) #2 52f908cbc3STing Wang 53f908cbc3STing Wang ; Function Attrs: nocallback noduplicate nofree nosync nounwind willreturn 54f908cbc3STing Wang declare i1 @llvm.loop.decrement.i64(i64) #2 55f908cbc3STing Wang 56f908cbc3STing Wang attributes #0 = { "unsafe-fp-math"="true" } 57f908cbc3STing Wang attributes #1 = { nocallback nofree nosync nounwind readnone speculatable willreturn } 58f908cbc3STing Wang attributes #2 = { nocallback noduplicate nofree nosync nounwind willreturn } 59f908cbc3STing Wang 60f908cbc3STing Wang !llvm.ident = !{!0} 61f908cbc3STing Wang 62f908cbc3STing Wang !0 = !{!""} 63f908cbc3STing Wang 64f908cbc3STing Wang... 65f908cbc3STing Wang--- 66f908cbc3STing Wangname: test 67710923cdSTing Wang# CHECK: test 68f908cbc3STing Wangalignment: 16 69f908cbc3STing WangexposesReturnsTwice: false 70f908cbc3STing Wanglegalized: false 71f908cbc3STing WangregBankSelected: false 72f908cbc3STing Wangselected: false 73f908cbc3STing WangfailedISel: false 74f908cbc3STing WangtracksRegLiveness: true 75f908cbc3STing WanghasWinCFI: false 76f908cbc3STing WangcallsEHReturn: false 77f908cbc3STing WangcallsUnwindInit: false 78f908cbc3STing WanghasEHCatchret: false 79f908cbc3STing WanghasEHScopes: false 80f908cbc3STing WanghasEHFunclets: false 81f908cbc3STing WangfailsVerification: false 82f908cbc3STing WangtracksDebugUserValues: false 83f908cbc3STing Wangregisters: 84f908cbc3STing Wang - { id: 0, class: g8rc, preferred-register: '' } 85f908cbc3STing Wang - { id: 1, class: crbitrc, preferred-register: '' } 86f908cbc3STing Wang - { id: 2, class: g8rc, preferred-register: '' } 87f908cbc3STing Wang - { id: 3, class: g8rc, preferred-register: '' } 88f908cbc3STing Wang - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' } 89f908cbc3STing Wang - { id: 5, class: g8rc_and_g8rc_nox0, preferred-register: '' } 90f908cbc3STing Wang - { id: 6, class: crbitrc, preferred-register: '' } 91f908cbc3STing Wang - { id: 7, class: g8rc, preferred-register: '' } 92f908cbc3STing Wang - { id: 8, class: gprc, preferred-register: '' } 93f908cbc3STing Wang - { id: 9, class: g8rc_and_g8rc_nox0, preferred-register: '' } 94f908cbc3STing Wang - { id: 10, class: g8rc_and_g8rc_nox0, preferred-register: '' } 95f908cbc3STing Wang - { id: 11, class: crrc, preferred-register: '' } 96f908cbc3STing Wang - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' } 97f908cbc3STing Wang - { id: 13, class: crbitrc, preferred-register: '' } 98f908cbc3STing Wang - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 99f908cbc3STing Wang - { id: 15, class: gprc, preferred-register: '' } 100f908cbc3STing Wangliveins: [] 101f908cbc3STing WangframeInfo: 102f908cbc3STing Wang isFrameAddressTaken: false 103f908cbc3STing Wang isReturnAddressTaken: false 104f908cbc3STing Wang hasStackMap: false 105f908cbc3STing Wang hasPatchPoint: false 106f908cbc3STing Wang stackSize: 0 107f908cbc3STing Wang offsetAdjustment: 0 108f908cbc3STing Wang maxAlignment: 1 109f908cbc3STing Wang adjustsStack: false 110f908cbc3STing Wang hasCalls: false 111f908cbc3STing Wang stackProtector: '' 112f908cbc3STing Wang functionContext: '' 113f908cbc3STing Wang maxCallFrameSize: 4294967295 114f908cbc3STing Wang cvBytesOfCalleeSavedRegisters: 0 115f908cbc3STing Wang hasOpaqueSPAdjustment: false 116f908cbc3STing Wang hasVAStart: false 117f908cbc3STing Wang hasMustTailInVarArgFunc: false 118f908cbc3STing Wang hasTailCall: false 119f908cbc3STing Wang localFrameSize: 0 120f908cbc3STing Wang savePoint: '' 121f908cbc3STing Wang restorePoint: '' 122f908cbc3STing WangfixedStack: [] 123f908cbc3STing Wangstack: [] 124f908cbc3STing WangcallSites: [] 125f908cbc3STing WangdebugValueSubstitutions: [] 126f908cbc3STing Wangconstants: [] 127f908cbc3STing WangmachineFunctionInfo: {} 128f908cbc3STing Wangbody: | 129f908cbc3STing Wang bb.0.test_entry: 130f908cbc3STing Wang successors: %bb.7(0x40000000), %bb.1(0x40000000) 131f908cbc3STing Wang 132f908cbc3STing Wang %5:g8rc_and_g8rc_nox0 = IMPLICIT_DEF 133*60442f0dSNikita Popov %0:g8rc = LWA 0, killed %5 :: (load (s32) from `ptr undef`) 134f908cbc3STing Wang %6:crbitrc = IMPLICIT_DEF 135f908cbc3STing Wang BC killed %6, %bb.7 136f908cbc3STing Wang B %bb.1 137f908cbc3STing Wang 138f908cbc3STing Wang bb.1._loop_40_loopHeader_: 139f908cbc3STing Wang successors: %bb.3(0x80000000) 140f908cbc3STing Wang 141f908cbc3STing Wang %9:g8rc_and_g8rc_nox0 = IMPLICIT_DEF 142*60442f0dSNikita Popov %8:gprc = LWZ 0, %9 :: (load (s32) from `ptr undef`) 143f908cbc3STing Wang %15:gprc = ANDI_rec %8, 1, implicit-def $cr0 144f908cbc3STing Wang %1:crbitrc = COPY $cr0eq 145f908cbc3STing Wang %10:g8rc_and_g8rc_nox0 = SUBFIC8 %0, 1, implicit-def dead $carry 146f908cbc3STing Wang %11:crrc = CMPDI %10, 1 147f908cbc3STing Wang %12:g8rc_and_g8rc_nox0 = LI8 1 148f908cbc3STing Wang %2:g8rc = ISEL8 %10, %12, %11.sub_gt 149f908cbc3STing Wang %7:g8rc = IMPLICIT_DEF 150f908cbc3STing Wang B %bb.3 151f908cbc3STing Wang 152f908cbc3STing Wang bb.2._label_43.loopexit: 153f908cbc3STing Wang successors: %bb.3(0x80000000) 154f908cbc3STing Wang 155f908cbc3STing Wang %3:g8rc = ADDI8 %4, -1 156f908cbc3STing Wang 157f908cbc3STing Wang bb.3._label_43: 158f908cbc3STing Wang successors: %bb.5(0x80000000) 159f908cbc3STing Wang 160f908cbc3STing Wang %4:g8rc_and_g8rc_nox0 = PHI %7, %bb.1, %3, %bb.2 161f908cbc3STing Wang MTCTR8loop %2, implicit-def dead $ctr8 162f908cbc3STing Wang B %bb.5 163f908cbc3STing Wang 164f908cbc3STing Wang bb.4._loop_44_loopHeader_: 165f908cbc3STing Wang successors: %bb.5(0x7c000000), %bb.2(0x04000000) 166f908cbc3STing Wang 167f908cbc3STing Wang %13:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8 168f908cbc3STing Wang BCn killed %13, %bb.2 169f908cbc3STing Wang B %bb.5 170f908cbc3STing Wang 171f908cbc3STing Wang bb.5._loop_44_do_: 172f908cbc3STing Wang successors: %bb.6(0x00000000), %bb.4(0x80000000) 173f908cbc3STing Wang 174f908cbc3STing Wang BCn %1, %bb.4 175f908cbc3STing Wang B %bb.6 176f908cbc3STing Wang 177f908cbc3STing Wang bb.6._label_42.loopexit: 178f908cbc3STing Wang successors: 179f908cbc3STing Wang 180f908cbc3STing Wang %14:g8rc_and_g8rc_nox0 = IMPLICIT_DEF 181*60442f0dSNikita Popov STW8 %4, 0, killed %14 :: (store (s32) into `ptr undef`) 182f908cbc3STing Wang 183f908cbc3STing Wang bb.7._label_42: 184f908cbc3STing Wang 185f908cbc3STing Wang... 186