1# RUN: llc -mtriple powerpc64-unknown-linux-gnu -run-pass livevars -run-pass phi-node-elimination -verify-machineinstrs -o - %s | FileCheck %s 2 3# This test case was originally known as 4# test/CodeGen/PowerPC/2013-07-01-PHIElimBug.ll 5# 6# It was discovered that the original test case no longer reproduced the bug 7# from PR16508 (solved in rL185363). That could have been resolved by adding 8# -O1 (or possibly -O0) to the run line, but instead the test case was 9# converted into this .mir test case. Having it as a .mir test should make it 10# less sensitive to changes in earlier passes. 11 12--- | 13 target datalayout = "E-m:e-i64:64-n32:64" 14 target triple = "powerpc64-unknown-linux-gnu" 15 16 @g_51 = external global [8 x i32], align 4 17 define void @func_7() { 18 bb.0: 19 ret void 20 } 21... 22--- 23name: func_7 24tracksRegLiveness: true 25body: | 26 bb.0: 27 liveins: $x2 28 29 %0:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @g_51 30 %1:g8rc_and_g8rc_nox0 = LDtocL @g_51, killed %0, implicit $x2 :: (load 8) 31 %2:gprc = LI 0 32 %3:crrc = CMPLWI killed %2, 0 33 BCC 76, killed %3, %bb.2 34 35 bb.1: 36 %4:g8rc = ADDI8 killed %1, 24 37 B %bb.4 38 39 bb.2: 40 %5:g8rc = ADDI8 killed %1, 24 41 %6:g8rc = LI8 0 42 %7:crrc = CMPLWI undef %8:gprc, 20 43 44 bb.3: 45 %9:g8rc = PHI %5, %bb.2, %10, %bb.3 46 %10:g8rc = PHI %6, %bb.2, undef %11:g8rc, %bb.3 47 BCC 68, %7, %bb.3 48 B %bb.4 49 50 bb.4: 51 %12:g8rc_and_g8rc_nox0 = PHI %4, %bb.1, %9, %bb.3 52 %13:g8rc = LI8 0 53 STW8 killed %13, 0, killed %12 :: (store 4) 54 BLR8 implicit $lr8, implicit $rm 55 56... 57 58# Original TR (and 2013-07-01-PHIElimBug.ll) was about verifier errors for bb.3. 59# 60# I got a feeling that we also need to have some checks to see that # the code 61# is correct in some way. Hopefully this test case is stable enough to verify 62# the full MIR like this. 63# 64# CHECK: bb.0: 65# CHECK: %0:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @g_51 66# CHECK-NEXT: %1:g8rc_and_g8rc_nox0 = LDtocL @g_51, killed %0, implicit killed $x2 :: (load 8) 67# CHECK-NEXT: %2:gprc = LI 0 68# CHECK-NEXT: %3:crrc = CMPLWI killed %2, 0 69# CHECK-NEXT: BCC 76, killed %3, %bb.2 70# CHECK: bb.1: 71# CHECK: %4:g8rc = ADDI8 killed %1, 24 72# CHECK-NEXT: %16:g8rc_and_g8rc_nox0 = COPY killed %4 73# CHECK-NEXT: B %bb.4 74# CHECK: bb.2: 75# CHECK: %5:g8rc = ADDI8 killed %1, 24 76# CHECK-NEXT: %6:g8rc = LI8 0 77# CHECK-NEXT: %7:crrc = CMPLWI undef %8:gprc, 20 78# CHECK-NEXT: %14:g8rc = COPY killed %5 79# CHECK-NEXT: %15:g8rc = COPY killed %6 80# CHECK: bb.3: 81# CHECK: %10:g8rc = COPY killed %15 82# CHECK-NEXT: %9:g8rc = COPY killed %14 83# CHECK-NEXT: %14:g8rc = COPY killed %10 84# CHECK-NEXT: %15:g8rc = IMPLICIT_DEF 85# CHECK-NEXT: %16:g8rc_and_g8rc_nox0 = COPY killed %9 86# CHECK-NEXT: BCC 68, %7, %bb.3 87# CHECK-NEXT: B %bb.4 88# CHECK: bb.4: 89# CHECK: %12:g8rc_and_g8rc_nox0 = COPY killed %16 90# CHECK-NEXT: %13:g8rc = LI8 0 91# CHECK-NEXT: STW8 killed %13, 0, killed %12 :: (store 4) 92# CHECK-NEXT: BLR8 implicit $lr8, implicit $rm 93