| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc < %s -mcpu=sm_30 -mattr=+ptx60 -verify-machineinstrs | FileCheck %s |
| |
| target triple = "nvptx64-unknown-nvidiacl" |
| |
| define void @pr170051(i32 %cond) { |
| ; CHECK-LABEL: pr170051( |
| ; CHECK: { |
| ; CHECK-NEXT: .reg .pred %p<2>; |
| ; CHECK-NEXT: .reg .b32 %r<4>; |
| ; CHECK-EMPTY: |
| ; CHECK-NEXT: // %bb.0: // %entry |
| ; CHECK-NEXT: mov.b32 %r2, 0; |
| ; CHECK-NEXT: ld.param.b32 %r1, [pr170051_param_0]; |
| ; CHECK-NEXT: setp.gt.u32 %p1, %r1, 6; |
| ; CHECK-NEXT: bra.uni $L__BB0_3; |
| ; CHECK-NEXT: $L__BB0_1: // %BS_LABEL_2 |
| ; CHECK-NEXT: // in Loop: Header=BB0_3 Depth=1 |
| ; CHECK-NEXT: or.b32 %r3, %r2, 1; |
| ; CHECK-NEXT: $L__BB0_2: // %for.cond4 |
| ; CHECK-NEXT: // in Loop: Header=BB0_3 Depth=1 |
| ; CHECK-NEXT: mov.b32 %r2, %r3; |
| ; CHECK-NEXT: $L__BB0_3: // %BS_LABEL_1 |
| ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1 |
| ; CHECK-NEXT: @%p1 bra $L__BB0_5; |
| ; CHECK-NEXT: // %bb.4: // %BS_LABEL_1 |
| ; CHECK-NEXT: // in Loop: Header=BB0_3 Depth=1 |
| ; CHECK-NEXT: mov.b32 %r3, %r1; |
| ; CHECK-NEXT: $L_brx_0: .branchtargets |
| ; CHECK-NEXT: $L__BB0_2, |
| ; CHECK-NEXT: $L__BB0_3, |
| ; CHECK-NEXT: $L__BB0_5, |
| ; CHECK-NEXT: $L__BB0_5, |
| ; CHECK-NEXT: $L__BB0_1, |
| ; CHECK-NEXT: $L__BB0_5, |
| ; CHECK-NEXT: $L__BB0_3; |
| ; CHECK-NEXT: brx.idx %r1, $L_brx_0; |
| ; CHECK-NEXT: $L__BB0_5: // %unreachable |
| ; CHECK-NEXT: // begin inline asm |
| ; CHECK-NEXT: exit; |
| ; CHECK-NEXT: // end inline asm |
| entry: |
| br label %for.cond |
| |
| for.cond: ; preds = %for.cond4.for.cond_crit_edge, %BS_LABEL_1, %BS_LABEL_1, %entry |
| %p_2218_0.1 = phi i32 [ 0, %entry ], [ %p_2218_0.3, %BS_LABEL_1 ], [ %p_2218_0.3, %BS_LABEL_1 ], [ poison, %for.cond4.for.cond_crit_edge ] |
| br label %BS_LABEL_1 |
| |
| BS_LABEL_2: ; preds = %BS_LABEL_1 |
| %sub = or i32 %p_2218_0.3, 1 |
| br label %for.cond4 |
| |
| for.cond4: ; preds = %BS_LABEL_1, %BS_LABEL_2 |
| %p_2218_0.2 = phi i32 [ 0, %BS_LABEL_1 ], [ %sub, %BS_LABEL_2 ] |
| br i1 false, label %for.cond4.for.cond_crit_edge, label %BS_LABEL_1 |
| |
| for.cond4.for.cond_crit_edge: ; preds = %for.cond4 |
| br label %for.cond |
| |
| BS_LABEL_1: ; preds = %for.cond4, %for.cond |
| %p_2218_0.3 = phi i32 [ %p_2218_0.2, %for.cond4 ], [ %p_2218_0.1, %for.cond ] |
| switch i32 %cond, label %unreachable [ |
| i32 0, label %for.cond4 |
| i32 4, label %BS_LABEL_2 |
| i32 1, label %for.cond |
| i32 6, label %for.cond |
| ] |
| |
| unreachable: ; preds = %BS_LABEL_1 |
| unreachable |
| } |
| |
| |