131 lines · plain
1# RUN: llc -mtriple powerpc64le-unknown-linux-gnu %s -o - 2>&1 \2# RUN: -run-pass=livevars,phi-node-elimination -verify-machineinstrs | \3# RUN: FileCheck %s4# RUN: llc -mtriple powerpc64le-unknown-linux-gnu %s -o - 2>&1 \5# RUN: --passes='require<live-vars>,phi-node-elimination' -verify-each | \6# RUN: FileCheck %s7 8--- |9 ; Function Attrs: noreturn nounwind10 define signext i32 @zext_free(ptr nocapture dereferenceable(8) %p) {11 entry:12 %.pre = load ptr, ptr %p, align 813 br label %loop14 15 loop: ; preds = %loop, %if.then3, %entry16 %0 = phi ptr [ %.pre, %entry ], [ %incdec.ptr4, %if.then3 ], [ %incdec.ptr, %loop ]17 %1 = load i8, ptr %0, align 118 %tobool = icmp eq i8 %1, 019 %incdec.ptr = getelementptr inbounds i8, ptr %0, i64 120 store ptr %incdec.ptr, ptr %p, align 821 %2 = load i8, ptr %incdec.ptr, align 122 %tobool2 = icmp ne i8 %2, 023 %or.cond = and i1 %tobool, %tobool224 br i1 %or.cond, label %if.then3, label %loop25 26 if.then3: ; preds = %loop27 %incdec.ptr4 = getelementptr inbounds i8, ptr %0, i64 228 store ptr %incdec.ptr4, ptr %p, align 829 br label %loop30 }31 32 33...34---35name: zext_free36tracksRegLiveness: true37registers:38 - { id: 0, class: g8rc, preferred-register: '' }39 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }40 - { id: 2, class: g8rc, preferred-register: '' }41 - { id: 3, class: g8rc, preferred-register: '' }42 - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }43 - { id: 5, class: gprc, preferred-register: '' }44 - { id: 6, class: crrc, preferred-register: '' }45 - { id: 7, class: crbitrc, preferred-register: '' }46 - { id: 8, class: gprc, preferred-register: '' }47 - { id: 9, class: crrc, preferred-register: '' }48 - { id: 10, class: crbitrc, preferred-register: '' }49 - { id: 11, class: crbitrc, preferred-register: '' }50liveins:51 - { reg: '$x3', virtual-reg: '%4' }52body: |53 bb.0.entry:54 successors: %bb.1(0x80000000)55 liveins: $x356 57 %4:g8rc_and_g8rc_nox0 = COPY killed $x358 %0:g8rc = LD 0, %4 :: (dereferenceable load (s64) from %ir.p)59 60 bb.1.loop:61 successors: %bb.1(0x20000000), %bb.2(0x60000000)62 63 %1:g8rc_and_g8rc_nox0 = PHI %0, %bb.0, %2, %bb.1, %3, %bb.3, %2, %bb.264 %5:gprc = LBZ 0, %1 :: (load (s8) from %ir.0)65 %6:crrc = CMPWI killed %5, 066 %7:crbitrc = COPY killed %6.sub_eq67 %2:g8rc = nuw ADDI8 %1, 168 STD %2, 0, %4 :: (store (s64) into %ir.p)69 %8:gprc = LBZ 1, %1 :: (load (s8) from %ir.incdec.ptr)70 BCn killed %7, %bb.171 B %bb.272 73 bb.2.loop:74 successors: %bb.3(0x55555555), %bb.1(0x2aaaaaab)75 76 %9:crrc = CMPWI killed %8, 077 %10:crbitrc = COPY killed %9.sub_eq78 BC killed %10, %bb.179 B %bb.380 81 bb.3.if.then3:82 successors: %bb.1(0x80000000)83 84 %3:g8rc = nuw ADDI8 killed %1, 285 STD %3, 0, %4 :: (store (s64) into %ir.p)86 B %bb.187 88 ; CHECK-LABEL: name: zext_free89 ; CHECK: bb.0.entry:90 ; CHECK: successors: %bb.1(0x80000000)91 ; CHECK: liveins: $x392 93 ; CHECK: %4:g8rc_and_g8rc_nox0 = COPY killed $x394 ; CHECK: %0:g8rc = LD 0, %4 :: (dereferenceable load (s64) from %ir.p)95 ; CHECK: %12:g8rc_and_g8rc_nox0 = COPY killed %096 97 ; CHECK: bb.1.loop:98 ; CHECK: successors: %bb.1(0x20000000), %bb.2(0x60000000)99 100 ; CHECK: %1:g8rc_and_g8rc_nox0 = COPY killed %12101 ; CHECK: %5:gprc = LBZ 0, %1 :: (load (s8) from %ir.0)102 ; CHECK: %6:crrc = CMPWI killed %5, 0103 ; CHEXK: %7:crbitrc = COPY killed %6.sub_eq104 ; CHECK: %2:g8rc = nuw ADDI8 %1, 1105 ; CHECK: STD %2, 0, %4 :: (store (s64) into %ir.p)106 ; CHECK: %8:gprc = LBZ 1, %1 :: (load (s8) from %ir.incdec.ptr)107 ; CHECK: %12:g8rc_and_g8rc_nox0 = COPY %2108 ; CHECK: BCn killed %7, %bb.1109 ; CHECK: B %bb.2110 111 ; CHECK: bb.2.loop:112 ; CHECK: successors: %bb.3(0x55555555), %bb.1(0x2aaaaaab)113 114 ; CHECK: %9:crrc = CMPWI killed %8, 0115 ; CHECK: %10:crbitrc = COPY killed %9.sub_eq116 ; CHECK: %12:g8rc_and_g8rc_nox0 = COPY killed %2117 ; CHECK: BC killed %10, %bb.1118 ; CHECK: B %bb.3119 120 ; CHECK: bb.3.if.then3:121 ; CHECK: successors: %bb.1(0x80000000)122 123 ; CHECK: %3:g8rc = nuw ADDI8 killed %1, 2124 ; CHECK: STD %3, 0, %4 :: (store (s64) into %ir.p)125 ; CHECK: %12:g8rc_and_g8rc_nox0 = COPY killed %3126 ; CHECK: B %bb.1127 128 129...130 131