| # RUN: llc -mtriple=powerpc64le-unknown-unknown -start-before ppc-pre-emit-peephole \ | |
| # 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: 16 | |
| 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 | |
| ... |