| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -o - %s -run-pass=if-converter -simplify-mir | FileCheck %s |
| |
| --- | |
| ; ModuleID = 'ifcvt-dead-predicate.ll' |
| source_filename = "ifcvt-dead-predicate.ll" |
| target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" |
| target triple = "thumbv7-unknown-linux-android16" |
| |
| ; Function Attrs: minsize nounwind optsize ssp uwtable |
| define hidden zeroext i1 @branch_entry(i32* %command_set, i8* %requested_filename, i8** %filename_to_use) local_unnamed_addr #0 { |
| entry: |
| %0 = load i32, i32* %command_set, align 4 |
| %and.i.i = and i32 %0, 128 |
| %tobool.i.i.not = icmp eq i32 %and.i.i, 0 |
| br i1 %tobool.i.i.not, label %land.end, label %land.rhs |
| |
| land.rhs: ; preds = %entry |
| %call1 = tail call zeroext i1 @branch_target(i8* %requested_filename, i8** %filename_to_use) |
| ret i1 %call1 |
| |
| land.end: ; preds = %entry |
| ret i1 false |
| } |
| |
| ; Function Attrs: minsize optsize |
| declare zeroext i1 @branch_target(i8*, i8**) local_unnamed_addr #1 |
| |
| attributes #0 = { minsize nounwind optsize ssp uwtable } |
| attributes #1 = { minsize optsize } |
| |
| ... |
| --- |
| name: branch_entry |
| alignment: 2 |
| tracksRegLiveness: true |
| liveins: |
| - { reg: '$r0' } |
| - { reg: '$r1' } |
| - { reg: '$r2' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: branch_entry |
| ; CHECK: bb.0.entry: |
| ; CHECK: successors: %bb.1 |
| ; CHECK: liveins: $r0, $r1, $r2 |
| ; CHECK: renamable $r0 = tLDRBi killed renamable $r0, 0, 14 /* CC::al */, $noreg :: (load (s8) from %ir.command_set, align 4) |
| ; CHECK: dead renamable $r0, $cpsr = tLSLri killed renamable $r0, 24, 14 /* CC::al */, $noreg |
| ; CHECK: $r0, dead $noreg = tMOVi8 0, 5 /* CC::pl */, $cpsr |
| ; CHECK: tBX_RET 5 /* CC::pl */, killed $cpsr, implicit killed $r0 |
| ; CHECK: bb.1.land.rhs: |
| ; CHECK: liveins: $r1, $r2 |
| ; CHECK: $r0 = tMOVr killed $r1, 14 /* CC::al */, $noreg |
| ; CHECK: $r1 = tMOVr killed $r2, 14 /* CC::al */, $noreg |
| ; CHECK: tTAILJMPdND @branch_target, 14 /* CC::al */, $noreg, implicit $sp, implicit $sp, implicit $r0, implicit $r1 |
| bb.0.entry: |
| successors: %bb.1, %bb.2 |
| liveins: $r0, $r1, $r2 |
| |
| renamable $r0 = tLDRBi killed renamable $r0, 0, 14 /* CC::al */, $noreg :: (load (s8) from %ir.command_set, align 4) |
| dead renamable $r0, $cpsr = tLSLri killed renamable $r0, 24, 14 /* CC::al */, $noreg |
| t2Bcc %bb.2, 4 /* CC::mi */, killed $cpsr |
| |
| bb.1.land.end: |
| $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg |
| tBX_RET 14 /* CC::al */, $noreg, implicit $r0 |
| |
| bb.2.land.rhs: |
| liveins: $r1, $r2 |
| |
| $r0 = tMOVr killed $r1, 14 /* CC::al */, $noreg |
| $r1 = tMOVr killed $r2, 14 /* CC::al */, $noreg |
| tTAILJMPdND @branch_target, 14 /* CC::al */, $noreg, implicit $sp, implicit $sp, implicit $r0, implicit $r1 |
| |
| ... |