mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
29c0ba58cf
Summary: In the `ppc-early-ret` pass, we have use `BuildMI` and `copyImplicitOps` when the branch instructions can do the early return. But the two functions will add implicit operands twice, this is not correct. This patch is to remove the redundant implicit operands in `ppc-early-ret pass`. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D76042
61 lines
2.1 KiB
YAML
61 lines
2.1 KiB
YAML
# RUN: llc -mtriple powerpc64le-unknown-linux-gnu -run-pass=ppc-early-ret -o \
|
|
# RUN: - %s -verify-machineinstrs | FileCheck %s
|
|
|
|
---
|
|
name: testEarlyRet
|
|
body: |
|
|
bb.0.entry:
|
|
successors: %bb.4(0x40000000), %bb.1(0x40000000)
|
|
|
|
BC undef renamable $cr5lt, %bb.4
|
|
|
|
bb.1:
|
|
successors: %bb.2(0x80000000)
|
|
|
|
renamable $r3 = IMPLICIT_DEF
|
|
renamable $r4 = IMPLICIT_DEF
|
|
|
|
bb.2:
|
|
successors: %bb.3(0x80000000)
|
|
liveins: $r3, $r4
|
|
|
|
$r5 = OR $r4, $r4
|
|
renamable $r4 = ADDIC killed $r4, 1, implicit-def $carry
|
|
$r6 = OR $r3, $r3
|
|
renamable $r3 = ADDZE killed $r3, implicit-def dead $carry, implicit killed $carry
|
|
renamable $cr0 = CMPLW renamable $r3, killed renamable $r6
|
|
renamable $cr5lt = CRANDC renamable $cr0lt, renamable $cr0eq
|
|
renamable $cr1 = CMPLW renamable $r4, killed renamable $r5
|
|
BCLR killed renamable $cr5lt, implicit $lr, implicit $rm
|
|
|
|
bb.3:
|
|
successors: %bb.4(0x02082082), %bb.2(0x7df7df7e)
|
|
liveins: $cr0, $cr1, $r3, $r4
|
|
|
|
renamable $cr5lt = CRAND killed renamable $cr0eq, killed renamable $cr1lt, implicit $cr1, implicit $cr0
|
|
BCn killed renamable $cr5lt, %bb.2
|
|
|
|
bb.4:
|
|
BLR implicit $lr, implicit $rm
|
|
|
|
; CHECK-LABEL: testEarlyRet
|
|
; CHECK: bb.0.entry:
|
|
; CHECK: BCLR undef renamable $cr5lt, implicit $lr, implicit $rm
|
|
; CHECK: bb.1:
|
|
; CHECK: renamable $r3 = IMPLICIT_DEF
|
|
; CHECK: renamable $r4 = IMPLICIT_DEF
|
|
; CHECK: bb.2:
|
|
; CHECK: $r5 = OR $r4, $r4
|
|
; CHECK: renamable $r4 = ADDIC killed $r4, 1, implicit-def $carry
|
|
; CHECK: $r6 = OR $r3, $r3
|
|
; CHECK: renamable $r3 = ADDZE killed $r3, implicit-def dead $carry, implicit killed $carry
|
|
; CHECK: renamable $cr0 = CMPLW renamable $r3, killed renamable $r6
|
|
; CHECK: renamable $cr5lt = CRANDC renamable $cr0lt, renamable $cr0eq
|
|
; CHECK: renamable $cr1 = CMPLW renamable $r4, killed renamable $r5
|
|
; CHECK: BCLR killed renamable $cr5lt, implicit $lr, implicit $rm
|
|
; CHECK: bb.3:
|
|
; CHECK: renamable $cr5lt = CRAND killed renamable $cr0eq, killed renamable $cr1lt, implicit $cr1, implicit $cr0
|
|
; CHECK: BCn killed renamable $cr5lt, %bb.2
|
|
; CHECK: BLR implicit $lr, implicit $rm
|
|
...
|