File: param-add.ll

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.8-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,388 kB
  • sloc: cpp: 7,438,767; ansic: 1,393,871; asm: 1,012,926; python: 241,728; f90: 86,635; objc: 75,411; lisp: 42,144; pascal: 17,286; sh: 10,027; ml: 5,082; perl: 4,730; awk: 3,523; makefile: 3,349; javascript: 2,251; xml: 892; fortran: 672
file content (54 lines) | stat: -rw-r--r-- 2,005 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc < %s -march=nvptx64 --debug-counter=dagcombine=0 | FileCheck %s
; RUN: %if ptxas %{ llc < %s -march=nvptx64 --debug-counter=dagcombine=0 | %ptxas-verify %}

; REQUIRES: asserts
; asserts are required for --debug-counter=dagcombine=0 to have the intended
; effect of disabling DAG combines, which exposes the bug. When combines are
; enabled the bug does not occur.

%struct.1float = type <{ [1 x float] }>

declare i32 @callee(%struct.1float %a)

define i32 @test(%struct.1float alignstack(32) %data) {
; CHECK-LABEL: test(
; CHECK:       {
; CHECK-NEXT:    .reg .b32 %r<18>;
; CHECK-NEXT:    .reg .f32 %f<2>;
; CHECK-EMPTY:
; CHECK-NEXT:  // %bb.0:
; CHECK-NEXT:    ld.param.u8 %r1, [test_param_0+1];
; CHECK-NEXT:    shl.b32 %r2, %r1, 8;
; CHECK-NEXT:    ld.param.u8 %r3, [test_param_0];
; CHECK-NEXT:    or.b32 %r4, %r2, %r3;
; CHECK-NEXT:    ld.param.u8 %r5, [test_param_0+3];
; CHECK-NEXT:    shl.b32 %r6, %r5, 8;
; CHECK-NEXT:    ld.param.u8 %r7, [test_param_0+2];
; CHECK-NEXT:    or.b32 %r8, %r6, %r7;
; CHECK-NEXT:    shl.b32 %r9, %r8, 16;
; CHECK-NEXT:    or.b32 %r17, %r9, %r4;
; CHECK-NEXT:    mov.b32 %f1, %r17;
; CHECK-NEXT:    shr.u32 %r12, %r17, 8;
; CHECK-NEXT:    shr.u32 %r13, %r17, 16;
; CHECK-NEXT:    shr.u32 %r14, %r17, 24;
; CHECK-NEXT:    { // callseq 0, 0
; CHECK-NEXT:    .param .align 1 .b8 param0[4];
; CHECK-NEXT:    st.param.b8 [param0], %r17;
; CHECK-NEXT:    st.param.b8 [param0+1], %r12;
; CHECK-NEXT:    st.param.b8 [param0+2], %r13;
; CHECK-NEXT:    st.param.b8 [param0+3], %r14;
; CHECK-NEXT:    .param .b32 retval0;
; CHECK-NEXT:    call.uni (retval0),
; CHECK-NEXT:    callee,
; CHECK-NEXT:    (
; CHECK-NEXT:    param0
; CHECK-NEXT:    );
; CHECK-NEXT:    ld.param.b32 %r15, [retval0];
; CHECK-NEXT:    } // callseq 0
; CHECK-NEXT:    st.param.b32 [func_retval0], %r15;
; CHECK-NEXT:    ret;

  %1 = call i32 @callee(%struct.1float %data)
  ret i32 %1
}