|
2 | 2 | ; RUN: llc -mtriple=riscv32 -mattr=+f,+d < %s | FileCheck %s -check-prefix=RV32
|
3 | 3 | ; RUN: llc -mtriple=riscv64 -mattr=+f,+d < %s | FileCheck %s -check-prefix=RV64
|
4 | 4 |
|
5 |
| -; Check the SPIR_KERNEL call convention work |
| 5 | +; Check the SPIR_KERNEL call convention works. |
6 | 6 |
|
7 |
| -declare dso_local i64 @_Z13get_global_idj(i32 noundef signext) |
8 |
| - |
9 |
| -define dso_local spir_kernel void @foo(ptr nocapture noundef readonly align 4 %a, ptr nocapture noundef readonly align 4 %b, ptr nocapture noundef writeonly align 4 %c) { |
| 7 | +define dso_local spir_kernel void @foo() { |
10 | 8 | ; RV32-LABEL: foo:
|
11 |
| -; RV32: # %bb.0: # %entry |
12 |
| -; RV32-NEXT: addi sp, sp, -16 |
13 |
| -; RV32-NEXT: .cfi_def_cfa_offset 16 |
14 |
| -; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill |
15 |
| -; RV32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill |
16 |
| -; RV32-NEXT: sw s1, 4(sp) # 4-byte Folded Spill |
17 |
| -; RV32-NEXT: sw s2, 0(sp) # 4-byte Folded Spill |
18 |
| -; RV32-NEXT: .cfi_offset ra, -4 |
19 |
| -; RV32-NEXT: .cfi_offset s0, -8 |
20 |
| -; RV32-NEXT: .cfi_offset s1, -12 |
21 |
| -; RV32-NEXT: .cfi_offset s2, -16 |
22 |
| -; RV32-NEXT: mv s0, a2 |
23 |
| -; RV32-NEXT: mv s1, a1 |
24 |
| -; RV32-NEXT: mv s2, a0 |
25 |
| -; RV32-NEXT: li a0, 0 |
26 |
| -; RV32-NEXT: call _Z13get_global_idj |
27 |
| -; RV32-NEXT: slli a0, a0, 2 |
28 |
| -; RV32-NEXT: add s2, s2, a0 |
29 |
| -; RV32-NEXT: flw fa5, 0(s2) |
30 |
| -; RV32-NEXT: add s1, s1, a0 |
31 |
| -; RV32-NEXT: flw fa4, 0(s1) |
32 |
| -; RV32-NEXT: fadd.s fa5, fa5, fa4 |
33 |
| -; RV32-NEXT: add a0, s0, a0 |
34 |
| -; RV32-NEXT: fsw fa5, 0(a0) |
35 |
| -; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload |
36 |
| -; RV32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload |
37 |
| -; RV32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload |
38 |
| -; RV32-NEXT: lw s2, 0(sp) # 4-byte Folded Reload |
39 |
| -; RV32-NEXT: addi sp, sp, 16 |
| 9 | +; RV32: # %bb.0: |
40 | 10 | ; RV32-NEXT: ret
|
41 | 11 | ;
|
42 | 12 | ; RV64-LABEL: foo:
|
43 |
| -; RV64: # %bb.0: # %entry |
44 |
| -; RV64-NEXT: addi sp, sp, -32 |
45 |
| -; RV64-NEXT: .cfi_def_cfa_offset 32 |
46 |
| -; RV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
47 |
| -; RV64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill |
48 |
| -; RV64-NEXT: sd s1, 8(sp) # 8-byte Folded Spill |
49 |
| -; RV64-NEXT: sd s2, 0(sp) # 8-byte Folded Spill |
50 |
| -; RV64-NEXT: .cfi_offset ra, -8 |
51 |
| -; RV64-NEXT: .cfi_offset s0, -16 |
52 |
| -; RV64-NEXT: .cfi_offset s1, -24 |
53 |
| -; RV64-NEXT: .cfi_offset s2, -32 |
54 |
| -; RV64-NEXT: mv s0, a2 |
55 |
| -; RV64-NEXT: mv s1, a1 |
56 |
| -; RV64-NEXT: mv s2, a0 |
57 |
| -; RV64-NEXT: li a0, 0 |
58 |
| -; RV64-NEXT: call _Z13get_global_idj |
59 |
| -; RV64-NEXT: sext.w a0, a0 |
60 |
| -; RV64-NEXT: slli a0, a0, 2 |
61 |
| -; RV64-NEXT: add s2, s2, a0 |
62 |
| -; RV64-NEXT: flw fa5, 0(s2) |
63 |
| -; RV64-NEXT: add s1, s1, a0 |
64 |
| -; RV64-NEXT: flw fa4, 0(s1) |
65 |
| -; RV64-NEXT: fadd.s fa5, fa5, fa4 |
66 |
| -; RV64-NEXT: add a0, s0, a0 |
67 |
| -; RV64-NEXT: fsw fa5, 0(a0) |
68 |
| -; RV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
69 |
| -; RV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload |
70 |
| -; RV64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload |
71 |
| -; RV64-NEXT: ld s2, 0(sp) # 8-byte Folded Reload |
72 |
| -; RV64-NEXT: addi sp, sp, 32 |
| 13 | +; RV64: # %bb.0: |
73 | 14 | ; RV64-NEXT: ret
|
74 |
| -entry: |
75 |
| - %call = tail call i64 @_Z13get_global_idj(i32 noundef signext 0) |
76 |
| - %sext = shl i64 %call, 32 |
77 |
| - %idxprom = ashr exact i64 %sext, 32 |
78 |
| - %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom |
79 |
| - %0 = load float, ptr %arrayidx, align 4 |
80 |
| - %arrayidx2 = getelementptr inbounds float, ptr %b, i64 %idxprom |
81 |
| - %1 = load float, ptr %arrayidx2, align 4 |
82 |
| - %add = fadd float %0, %1 |
83 |
| - %arrayidx4 = getelementptr inbounds float, ptr %c, i64 %idxprom |
84 |
| - store float %add, ptr %arrayidx4, align 4 |
85 | 15 | ret void
|
86 | 16 | }
|
0 commit comments