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