reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
# 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 = ADDIStocHA8 $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 = ADDIStocHA8 $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