xref: /llvm-project/llvm/test/CodeGen/RISCV/kcfi.ll (revision 83835e22c7cd50c0e9b836cc359b6c59985b921f)
1; RUN: llc -mtriple=riscv32 -verify-machineinstrs -riscv-no-aliases < %s \
2; RUN:      | FileCheck %s --check-prefixes=CHECK,RV32
3; RUN: llc -mtriple=riscv64 -verify-machineinstrs -riscv-no-aliases < %s \
4; RUN:      | FileCheck %s --check-prefixes=CHECK,RV64
5
6; CHECK:       .word 12345678
7define void @f1(ptr noundef %x) !kcfi_type !1 {
8; CHECK-LABEL: f1:
9; CHECK:       # %bb.0:
10; CHECK:         lw t1, -4(a0)
11; CHECK-NEXT:    lui t2, 3014
12; RV32-NEXT:     addi t2, t2, 334
13; RV64-NEXT:     addiw t2, t2, 334
14; CHECK-NEXT:    beq t1, t2, .Ltmp0
15; CHECK-NEXT:  .Ltmp1:
16; CHECK-NEXT:    ebreak
17; CHECK-NEXT:    .section .kcfi_traps,"ao",@progbits,.text
18; CHECK-NEXT:  .Ltmp2:
19; CHECK-NEXT:    .word .Ltmp1-.Ltmp2
20; CHECK-NEXT:    .text
21; CHECK-NEXT:  .Ltmp0:
22; CHECK-NEXT:    jalr ra, 0(a0)
23  call void %x() [ "kcfi"(i32 12345678) ]
24; CHECK:         lw t1, -4(s0)
25; CHECK-NEXT:    addi t2, t2, 1234
26; CHECK-NEXT:    beq t1, t2, .Ltmp3
27; CHECK-NEXT:  .Ltmp4:
28; CHECK-NEXT:    ebreak
29; CHECK-NEXT:    .section .kcfi_traps,"ao",@progbits,.text
30; CHECK-NEXT:  .Ltmp5:
31; CHECK-NEXT:    .word .Ltmp4-.Ltmp5
32; CHECK-NEXT:    .text
33; CHECK-NEXT:  .Ltmp3:
34; CHECK-NEXT:    jalr ra, 0(s0)
35  call void %x() [ "kcfi"(i32 1234) ]
36  ret void
37}
38
39; CHECK-NOT:   .word:
40define void @f2(ptr noundef %x) #0 {
41; CHECK-LABEL: f2:
42; CHECK:       # %bb.0:
43; CHECK-NEXT:    addi zero, zero, 0
44; CHECK-NEXT:    addi zero, zero, 0
45; CHECK-NEXT:    lw t1, -4(a0)
46; CHECK-NEXT:    lui t2, 3014
47; RV32-NEXT:     addi t2, t2, 334
48; RV64-NEXT:     addiw t2, t2, 334
49; CHECK-NEXT:    beq t1, t2, .Ltmp6
50; CHECK-NEXT:  .Ltmp7:
51; CHECK-NEXT:    ebreak
52; CHECK-NEXT:    .section .kcfi_traps,"ao",@progbits,.text
53; CHECK-NEXT:  .Ltmp8:
54; CHECK-NEXT:    .word .Ltmp7-.Ltmp8
55; CHECK-NEXT:    .text
56; CHECK-NEXT:  .Ltmp6:
57; CHECK-NEXT:    jalr zero, 0(a0)
58  tail call void %x() [ "kcfi"(i32 12345678) ]
59  ret void
60}
61
62attributes #0 = { "patchable-function-entry"="2" }
63
64!llvm.module.flags = !{!0}
65!0 = !{i32 4, !"kcfi", i32 1}
66!1 = !{i32 12345678}
67