| # RUN: llc -mtriple powerpc64-unknown-linux-gnu -run-pass livevars -run-pass phi-node-elimination -verify-machineinstrs -o - %s | FileCheck %s |
| |
| # This test case was originally known as |
| # test/CodeGen/PowerPC/2013-07-01-PHIElimBug.ll |
| # |
| # It was discovered that the original test case no longer reproduced the bug |
| # from PR16508 (solved in rL185363). That could have been resolved by adding |
| # -O1 (or possibly -O0) to the run line, but instead the test case was |
| # converted into this .mir test case. Having it as a .mir test should make it |
| # less sensitive to changes in earlier passes. |
| |
| --- | |
| target datalayout = "E-m:e-i64:64-n32:64" |
| target triple = "powerpc64-unknown-linux-gnu" |
| |
| @g_51 = external global [8 x i32], align 4 |
| define void @func_7() { |
| bb.0: |
| ret void |
| } |
| ... |
| --- |
| name: func_7 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $x2 |
| |
| %0:g8rc_and_g8rc_nox0 = ADDIStocHA $x2, @g_51 |
| %1:g8rc_and_g8rc_nox0 = LDtocL @g_51, killed %0, implicit $x2 :: (load 8) |
| %2:gprc = LI 0 |
| %3:crrc = CMPLWI killed %2, 0 |
| BCC 76, killed %3, %bb.2 |
| |
| bb.1: |
| %4:g8rc = ADDI8 killed %1, 24 |
| B %bb.4 |
| |
| bb.2: |
| %5:g8rc = ADDI8 killed %1, 24 |
| %6:g8rc = LI8 0 |
| %7:crrc = CMPLWI undef %8:gprc, 20 |
| |
| bb.3: |
| %9:g8rc = PHI %5, %bb.2, %10, %bb.3 |
| %10:g8rc = PHI %6, %bb.2, undef %11:g8rc, %bb.3 |
| BCC 68, %7, %bb.3 |
| B %bb.4 |
| |
| bb.4: |
| %12:g8rc_and_g8rc_nox0 = PHI %4, %bb.1, %9, %bb.3 |
| %13:g8rc = LI8 0 |
| STW8 killed %13, 0, killed %12 :: (store 4) |
| BLR8 implicit $lr8, implicit $rm |
| |
| ... |
| |
| # Original TR (and 2013-07-01-PHIElimBug.ll) was about verifier errors for bb.3. |
| # |
| # I got a feeling that we also need to have some checks to see that # the code |
| # is correct in some way. Hopefully this test case is stable enough to verify |
| # the full MIR like this. |
| # |
| # CHECK: bb.0: |
| # CHECK: %0:g8rc_and_g8rc_nox0 = ADDIStocHA $x2, @g_51 |
| # CHECK-NEXT: %1:g8rc_and_g8rc_nox0 = LDtocL @g_51, killed %0, implicit killed $x2 :: (load 8) |
| # CHECK-NEXT: %2:gprc = LI 0 |
| # CHECK-NEXT: %3:crrc = CMPLWI killed %2, 0 |
| # CHECK-NEXT: BCC 76, killed %3, %bb.2 |
| # CHECK: bb.1: |
| # CHECK: %4:g8rc = ADDI8 killed %1, 24 |
| # CHECK-NEXT: %16:g8rc_and_g8rc_nox0 = COPY killed %4 |
| # CHECK-NEXT: B %bb.4 |
| # CHECK: bb.2: |
| # CHECK: %5:g8rc = ADDI8 killed %1, 24 |
| # CHECK-NEXT: %6:g8rc = LI8 0 |
| # CHECK-NEXT: %7:crrc = CMPLWI undef %8:gprc, 20 |
| # CHECK-NEXT: %14:g8rc = COPY killed %5 |
| # CHECK-NEXT: %15:g8rc = COPY killed %6 |
| # CHECK: bb.3: |
| # CHECK: %10:g8rc = COPY killed %15 |
| # CHECK-NEXT: %9:g8rc = COPY killed %14 |
| # CHECK-NEXT: %14:g8rc = COPY killed %10 |
| # CHECK-NEXT: %15:g8rc = IMPLICIT_DEF |
| # CHECK-NEXT: %16:g8rc_and_g8rc_nox0 = COPY killed %9 |
| # CHECK-NEXT: BCC 68, %7, %bb.3 |
| # CHECK-NEXT: B %bb.4 |
| # CHECK: bb.4: |
| # CHECK: %12:g8rc_and_g8rc_nox0 = COPY killed %16 |
| # CHECK-NEXT: %13:g8rc = LI8 0 |
| # CHECK-NEXT: STW8 killed %13, 0, killed %12 :: (store 4) |
| # CHECK-NEXT: BLR8 implicit $lr8, implicit $rm |