|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| 2 | + |
| 3 | +; RUN: cat %s > %t.tgtattr |
| 4 | +; RUN: echo 'attributes #0 = { nounwind }' >> %t.tgtattr |
| 5 | +; RUN: %riscv32y_purecap_llc -mattr=+c,+y,+cap-mode -filetype=obj < %t.tgtattr \ |
| 6 | +; RUN: | llvm-objdump -d -M no-aliases - | FileCheck %s |
| 7 | +; RUN: %riscv64y_purecap_llc -mattr=+c,+y,+cap-mode -filetype=obj < %t.tgtattr \ |
| 8 | +; RUN: | llvm-objdump -d -M no-aliases - | FileCheck %s |
| 9 | +; RUN: %riscv64y_purecap_llc -mattr=+c,+y,+cap-mode,+xcheri-norvc -filetype=obj < %t.tgtattr \ |
| 10 | +; RUN: | llvm-objdump -d -M no-aliases --mattr=+y - | FileCheck %s --check-prefix=CHECK-NORVC |
| 11 | + |
| 12 | +; RUN: cat %s > %t.fnattr |
| 13 | +; RUN: echo 'attributes #0 = { nounwind "target-features"="+c,+y,+cap-mode" }' >> %t.fnattr |
| 14 | +; RUN: %riscv32y_purecap_llc -filetype=obj < %t.fnattr \ |
| 15 | +; RUN: | llvm-objdump -d --mattr=+c -M no-aliases - | FileCheck %s |
| 16 | +; RUN: %riscv64y_purecap_llc -filetype=obj < %t.fnattr \ |
| 17 | +; RUN: | llvm-objdump -d --mattr=+c -M no-aliases - | FileCheck %s |
| 18 | +; RUN: cat %s > %t.fnattr |
| 19 | +; RUN: echo 'attributes #0 = { nounwind "target-features"="+c,+y,+cap-mode,+xcheri-norvc" }' >> %t.fnattr |
| 20 | +; RUN: %riscv64y_purecap_llc -filetype=obj < %t.fnattr \ |
| 21 | +; RUN: | llvm-objdump -d --mattr=+c -M no-aliases --mattr=+y - | FileCheck %s --check-prefix=CHECK-NORVC |
| 22 | + |
| 23 | + |
| 24 | +define i32 @loadstore(ptr addrspace(200) %intptrarg, ptr addrspace(200) %ptrptrarg) addrspace(200) #0 { |
| 25 | +; CHECK-LABEL: <loadstore>: |
| 26 | +; CHECK-NEXT: c.cincoffset16csp csp, -32 |
| 27 | +; CHECK-NEXT: c.lw a2, 0(ca0) |
| 28 | +; CHECK-NEXT: c.li a3, 1 |
| 29 | +; CHECK-NEXT: c.sw a3, 0(ca0) |
| 30 | +; CHECK-NEXT: c.lc ca0, 0(ca1) |
| 31 | +; CHECK-NEXT: c.sc ca0, 0(ca1) |
| 32 | +; CHECK-NEXT: c.scsp ca0, 16(csp) |
| 33 | +; CHECK-NEXT: c.lcsp ca0, 16(csp) |
| 34 | +; CHECK-NEXT: c.swsp a2, 0(csp) |
| 35 | +; CHECK-NEXT: c.lwsp a0, 0(csp) |
| 36 | +; CHECK-NEXT: addi a0, a2, 0 |
| 37 | +; CHECK-NEXT: c.cincoffset16csp csp, 32 |
| 38 | +; CHECK-NEXT: c.jr cra |
| 39 | +; CHECK-NORVC-LABEL: <loadstore>: |
| 40 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}addiy csp, csp, -32 |
| 41 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}lw a2, 0(ca0) |
| 42 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}c.li a3, 1 |
| 43 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}sw a3, 0(ca0) |
| 44 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}ly ca0, 0(ca1) |
| 45 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}sy ca0, 0(ca1) |
| 46 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}sy ca0, 16(csp) |
| 47 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}ly ca0, 16(csp) |
| 48 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}sw a2, 0(csp) |
| 49 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}lw a0, 0(csp) |
| 50 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}addi a0, a2, 0 |
| 51 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}addiy csp, csp, 32 |
| 52 | +; CHECK-NORVC-NEXT: {{[^a-z.]}}jalr cnull, 0(cra) |
| 53 | + %stackptr = alloca ptr addrspace(200), align 16, addrspace(200) |
| 54 | + %stackint = alloca i32, align 16, addrspace(200) |
| 55 | + %val = load volatile i32, ptr addrspace(200) %intptrarg |
| 56 | + store volatile i32 1, ptr addrspace(200) %intptrarg |
| 57 | + %ptrval = load volatile ptr addrspace(200), ptr addrspace(200) %ptrptrarg |
| 58 | + store volatile ptr addrspace(200) %ptrval, ptr addrspace(200) %ptrptrarg |
| 59 | + store volatile ptr addrspace(200) %ptrval, ptr addrspace(200) %stackptr |
| 60 | + %stackptrval = load volatile ptr addrspace(200), ptr addrspace(200) %stackptr |
| 61 | + store volatile i32 %val, ptr addrspace(200) %stackint |
| 62 | + %stackintval = load volatile i32, ptr addrspace(200) %stackint |
| 63 | + ret i32 %val |
| 64 | +} |
0 commit comments