xref: /llvm-project/llvm/test/CodeGen/RISCV/zicfilp-indirect-branch.ll (revision 06449095c22097508854c00f06d27bdccf1ed667)
1*06449095SYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2*06449095SYeting Kuo; RUN: llc -mtriple=riscv64 -stop-after=finalize-isel < %s | FileCheck %s
3*06449095SYeting Kuo; RUN: llc -mtriple=riscv64 -mattr=+experimental-zicfilp -stop-after=finalize-isel < %s | FileCheck -check-prefixes=ZICFILP %s
4*06449095SYeting Kuo
5*06449095SYeting Kuo@brind.arr = internal unnamed_addr constant [2 x ptr] [ptr blockaddress(@brind, %5), ptr blockaddress(@brind, %8)], align 8
6*06449095SYeting Kuo@x = dso_local global i32 0, align 4
7*06449095SYeting Kuo
8*06449095SYeting Kuodefine void @brind(i32 noundef signext %0) {
9*06449095SYeting Kuo  ; CHECK-LABEL: name: brind
10*06449095SYeting Kuo  ; CHECK:   PseudoBRIND killed [[VAR:%.*]], 0
11*06449095SYeting Kuo  ; ZICFILP-LABEL: name: brind
12*06449095SYeting Kuo  ; ZICFILP:   PseudoBRINDNonX7 killed [[VAR:%.*]], 0
13*06449095SYeting Kuo  %2 = sext i32 %0 to i64
14*06449095SYeting Kuo  %3 = getelementptr inbounds [2 x ptr], ptr @brind.arr, i64 0, i64 %2
15*06449095SYeting Kuo  %4 = load ptr, ptr %3, align 8
16*06449095SYeting Kuo  indirectbr ptr %4, [label %5, label %8]
17*06449095SYeting Kuo
18*06449095SYeting Kuo5:                                                ; preds = %1
19*06449095SYeting Kuo  %6 = load i32, ptr @x, align 4
20*06449095SYeting Kuo  %7 = add nsw i32 %6, 2
21*06449095SYeting Kuo  store i32 %7, ptr @x, align 4
22*06449095SYeting Kuo  br label %8
23*06449095SYeting Kuo
24*06449095SYeting Kuo8:                                                ; preds = %5, %1
25*06449095SYeting Kuo  %9 = load i32, ptr @x, align 4
26*06449095SYeting Kuo  %10 = add nsw i32 %9, 1
27*06449095SYeting Kuo  store i32 %10, ptr @x, align 4
28*06449095SYeting Kuo  ret void
29*06449095SYeting Kuo}
30*06449095SYeting Kuo
31*06449095SYeting Kuodefine i32 @indirect_call(ptr %0) {
32*06449095SYeting Kuo  ; CHECK-LABEL: name: indirect_call
33*06449095SYeting Kuo  ; CHECK: PseudoCALLIndirect
34*06449095SYeting Kuo  ; ZICFILP-LABEL: name: indirect_call
35*06449095SYeting Kuo  ; ZICFILP: PseudoCALLIndirectNonX7
36*06449095SYeting Kuo  call void %0()
37*06449095SYeting Kuo  ret i32 0
38*06449095SYeting Kuo}
39*06449095SYeting Kuo
40*06449095SYeting Kuo
41*06449095SYeting Kuodefine void @indirect_tail(ptr %0) {
42*06449095SYeting Kuo  ; CHECK-LABEL: name: indirect_tail
43*06449095SYeting Kuo  ; CHECK: PseudoTAILIndirect
44*06449095SYeting Kuo  ; ZICFILP-LABEL: name: indirect_tail
45*06449095SYeting Kuo  ; ZICFILP: PseudoTAILIndirectNonX7
46*06449095SYeting Kuo  tail call void %0()
47*06449095SYeting Kuo  ret void
48*06449095SYeting Kuo}
49