2018-10-09 19:17:47 +08:00
|
|
|
# RUN: llc -mtriple=powerpc64le-unknown-unknown -start-before ppc-pre-emit-peephole \
|
2018-10-09 18:54:04 +08:00
|
|
|
# RUN: -verify-machineinstrs -ppc-asm-full-reg-names %s -o - | FileCheck %s
|
|
|
|
--- |
|
|
|
|
; ModuleID = 't.ll'
|
|
|
|
source_filename = "t.ll"
|
|
|
|
target datalayout = "e-m:e-i64:64-n32:64"
|
|
|
|
|
|
|
|
define signext i32 @test(i32 signext %a, i32 signext %b, i32 signext %c) {
|
|
|
|
entry:
|
|
|
|
%cmp = icmp slt i32 %a, %b
|
|
|
|
br i1 %cmp, label %return, label %if.end
|
|
|
|
|
|
|
|
if.end: ; preds = %entry
|
|
|
|
%cmp1 = icmp slt i32 %b, %a
|
|
|
|
br i1 %cmp1, label %return, label %if.end3
|
|
|
|
|
|
|
|
if.end3: ; preds = %if.end
|
|
|
|
%cmp4 = icmp eq i32 %a, %c
|
|
|
|
br i1 %cmp4, label %if.then5, label %if.end6
|
|
|
|
|
|
|
|
if.then5: ; preds = %if.end3
|
|
|
|
%add = shl nsw i32 %a, 1
|
|
|
|
br label %return
|
|
|
|
|
|
|
|
if.end6: ; preds = %if.end3
|
|
|
|
%cmp7 = icmp sgt i32 %c, %b
|
|
|
|
%add11 = add i32 %c, %b
|
|
|
|
%add12 = select i1 %cmp7, i32 %a, i32 0
|
|
|
|
%spec.select = add i32 %add11, %add12
|
|
|
|
ret i32 %spec.select
|
|
|
|
|
|
|
|
return: ; preds = %if.then5, %if.end, %entry
|
|
|
|
%retval.0 = phi i32 [ %add, %if.then5 ], [ %c, %entry ], [ %b, %if.end ]
|
|
|
|
ret i32 %retval.0
|
|
|
|
}
|
|
|
|
|
|
|
|
...
|
|
|
|
---
|
|
|
|
name: test
|
|
|
|
alignment: 4
|
|
|
|
exposesReturnsTwice: false
|
|
|
|
legalized: false
|
|
|
|
regBankSelected: false
|
|
|
|
selected: false
|
|
|
|
failedISel: false
|
|
|
|
tracksRegLiveness: true
|
|
|
|
registers:
|
|
|
|
liveins:
|
|
|
|
- { reg: '$x3', virtual-reg: '' }
|
|
|
|
- { reg: '$x4', virtual-reg: '' }
|
|
|
|
- { reg: '$x5', virtual-reg: '' }
|
|
|
|
frameInfo:
|
|
|
|
isFrameAddressTaken: false
|
|
|
|
isReturnAddressTaken: false
|
|
|
|
hasStackMap: false
|
|
|
|
hasPatchPoint: false
|
|
|
|
stackSize: 0
|
|
|
|
offsetAdjustment: 0
|
|
|
|
maxAlignment: 0
|
|
|
|
adjustsStack: false
|
|
|
|
hasCalls: false
|
|
|
|
stackProtector: ''
|
|
|
|
maxCallFrameSize: 0
|
|
|
|
hasOpaqueSPAdjustment: false
|
|
|
|
hasVAStart: false
|
|
|
|
hasMustTailInVarArgFunc: false
|
|
|
|
localFrameSize: 0
|
|
|
|
savePoint: ''
|
|
|
|
restorePoint: ''
|
|
|
|
fixedStack:
|
|
|
|
stack:
|
|
|
|
constants:
|
|
|
|
body: |
|
|
|
|
bb.0.entry:
|
|
|
|
successors: %bb.4(0x40000000), %bb.1(0x40000000)
|
|
|
|
liveins: $x3, $x4, $x5
|
|
|
|
|
|
|
|
renamable $cr0 = CMPW renamable $r3, renamable $r4
|
|
|
|
BCC 12, renamable $cr0, %bb.4
|
|
|
|
|
|
|
|
bb.1.if.end:
|
|
|
|
successors: %bb.6(0x40000000), %bb.2(0x40000000)
|
|
|
|
liveins: $cr0, $x3, $x4, $x5
|
|
|
|
|
|
|
|
BCC 36, killed renamable $cr0, %bb.2
|
|
|
|
|
|
|
|
bb.6:
|
|
|
|
liveins: $x4
|
|
|
|
|
|
|
|
; CHECK: mr r5, r4
|
|
|
|
; CHECK-NOT: mr r5, r5
|
|
|
|
; CHECK: extsw r3, r5
|
|
|
|
$r5 = OR killed $r4, $r4, implicit $x4, implicit-def $x5
|
|
|
|
$r5 = OR $r5, $r5, implicit-def $x5
|
|
|
|
renamable $x3 = EXTSW_32_64 killed renamable $r5, implicit $x5
|
|
|
|
BLR8 implicit $lr8, implicit $rm, implicit killed $x3
|
|
|
|
|
|
|
|
bb.2.if.end3:
|
|
|
|
successors: %bb.3(0x40000000), %bb.5(0x40000000)
|
|
|
|
liveins: $x3, $x4, $x5
|
|
|
|
|
|
|
|
renamable $cr0 = CMPLW renamable $r3, renamable $r5
|
|
|
|
BCC 68, killed renamable $cr0, %bb.5
|
|
|
|
|
|
|
|
bb.3.if.then5:
|
|
|
|
successors: %bb.4(0x80000000)
|
|
|
|
liveins: $x3
|
|
|
|
|
|
|
|
renamable $r5 = RLWINM killed renamable $r3, 1, 0, 30, implicit $x3, implicit-def $x5
|
|
|
|
|
|
|
|
bb.4.return:
|
|
|
|
liveins: $x5
|
|
|
|
|
|
|
|
renamable $x3 = EXTSW_32_64 killed renamable $r5, implicit $x5
|
|
|
|
BLR8 implicit $lr8, implicit $rm, implicit killed $x3
|
|
|
|
|
|
|
|
bb.5.if.end6:
|
|
|
|
liveins: $x3, $x4, $x5
|
|
|
|
|
|
|
|
renamable $cr0 = CMPW renamable $r5, renamable $r4
|
|
|
|
renamable $r6 = LI 0
|
|
|
|
renamable $r4 = ADD4 killed renamable $r5, killed renamable $r4, implicit $x4, implicit $x5
|
|
|
|
renamable $r3 = ISEL killed renamable $r3, killed renamable $r6, killed renamable $cr0gt, implicit $cr0, implicit $x3
|
|
|
|
renamable $r3 = ADD4 killed renamable $r4, killed renamable $r3
|
|
|
|
renamable $x3 = EXTSW_32_64 killed renamable $r3
|
|
|
|
BLR8 implicit $lr8, implicit $rm, implicit killed $x3
|
|
|
|
|
|
|
|
...
|