|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: llc < %s -march=nvptx64 --debug-counter=dagcombine=0 | FileCheck %s |
| 3 | +; RUN: %if ptxas %{ llc < %s -march=nvptx64 --debug-counter=dagcombine=0 | %ptxas-verify %} |
| 4 | + |
| 5 | +; REQUIRES: asserts |
| 6 | +; asserts are required for --debug-counter=dagcombine=0 to have the intended |
| 7 | +; effect of disabling DAG combines, which exposes the bug. When combines are |
| 8 | +; enabled the bug does not occur. |
| 9 | + |
| 10 | +%struct.1float = type <{ [1 x float] }> |
| 11 | + |
| 12 | +declare i32 @callee(%struct.1float %a) |
| 13 | + |
| 14 | +define i32 @test(%struct.1float alignstack(32) %data) { |
| 15 | +; CHECK-LABEL: test( |
| 16 | +; CHECK: { |
| 17 | +; CHECK-NEXT: .reg .b32 %r<18>; |
| 18 | +; CHECK-NEXT: .reg .f32 %f<2>; |
| 19 | +; CHECK-EMPTY: |
| 20 | +; CHECK-NEXT: // %bb.0: |
| 21 | +; CHECK-NEXT: ld.param.u8 %r1, [test_param_0+1]; |
| 22 | +; CHECK-NEXT: shl.b32 %r2, %r1, 8; |
| 23 | +; CHECK-NEXT: ld.param.u8 %r3, [test_param_0]; |
| 24 | +; CHECK-NEXT: or.b32 %r4, %r2, %r3; |
| 25 | +; CHECK-NEXT: ld.param.u8 %r5, [test_param_0+3]; |
| 26 | +; CHECK-NEXT: shl.b32 %r6, %r5, 8; |
| 27 | +; CHECK-NEXT: ld.param.u8 %r7, [test_param_0+2]; |
| 28 | +; CHECK-NEXT: or.b32 %r8, %r6, %r7; |
| 29 | +; CHECK-NEXT: shl.b32 %r9, %r8, 16; |
| 30 | +; CHECK-NEXT: or.b32 %r17, %r9, %r4; |
| 31 | +; CHECK-NEXT: mov.b32 %f1, %r17; |
| 32 | +; CHECK-NEXT: shr.u32 %r12, %r17, 8; |
| 33 | +; CHECK-NEXT: shr.u32 %r13, %r17, 16; |
| 34 | +; CHECK-NEXT: shr.u32 %r14, %r17, 24; |
| 35 | +; CHECK-NEXT: { // callseq 0, 0 |
| 36 | +; CHECK-NEXT: .param .align 1 .b8 param0[4]; |
| 37 | +; CHECK-NEXT: st.param.b8 [param0], %r17; |
| 38 | +; CHECK-NEXT: st.param.b8 [param0+1], %r12; |
| 39 | +; CHECK-NEXT: st.param.b8 [param0+2], %r13; |
| 40 | +; CHECK-NEXT: st.param.b8 [param0+3], %r14; |
| 41 | +; CHECK-NEXT: .param .b32 retval0; |
| 42 | +; CHECK-NEXT: call.uni (retval0), |
| 43 | +; CHECK-NEXT: callee, |
| 44 | +; CHECK-NEXT: ( |
| 45 | +; CHECK-NEXT: param0 |
| 46 | +; CHECK-NEXT: ); |
| 47 | +; CHECK-NEXT: ld.param.b32 %r15, [retval0]; |
| 48 | +; CHECK-NEXT: } // callseq 0 |
| 49 | +; CHECK-NEXT: st.param.b32 [func_retval0], %r15; |
| 50 | +; CHECK-NEXT: ret; |
| 51 | + |
| 52 | + %1 = call i32 @callee(%struct.1float %data) |
| 53 | + ret i32 %1 |
| 54 | +} |
0 commit comments