Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / SPARC / branches-v9.ll
blob6b76888df065a75b9f1a0800c8e35c2588364cc2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=sparcv9 -disable-sparc-leaf-proc | FileCheck %s
4 ;; 1. When emitting code for v9, CCR branches should always explicitly specify
5 ;;    %icc or %xcc.
6 ;; 2. Branches on the result of a 64-bit compare with constant zero should be
7 ;;    lowered into an instruction in the BPr class (§A.3 in V9 spec).
8 ;; 3. There should never be a `ba` that jumps into two instructions immediately
9 ;;    following it.
11 define void @bricc(i32 signext %sel) {
12 ; CHECK-LABEL: bricc:
13 ; CHECK:         .cfi_startproc
14 ; CHECK-NEXT:  ! %bb.0: ! %entry
15 ; CHECK-NEXT:    save %sp, -176, %sp
16 ; CHECK-NEXT:    .cfi_def_cfa_register %fp
17 ; CHECK-NEXT:    .cfi_window_save
18 ; CHECK-NEXT:    .cfi_register %o7, %i7
19 ; CHECK-NEXT:    cmp %i0, 0
20 ; CHECK-NEXT:    be %icc, .LBB0_2
21 ; CHECK-NEXT:    nop
22 ; CHECK-NEXT:  ! %bb.1: ! %fbb
23 ; CHECK-NEXT:    call f2
24 ; CHECK-NEXT:    nop
25 ; CHECK-NEXT:    ba .LBB0_3
26 ; CHECK-NEXT:    nop
27 ; CHECK-NEXT:  .LBB0_2: ! %tbb
28 ; CHECK-NEXT:    call f1
29 ; CHECK-NEXT:    nop
30 ; CHECK-NEXT:  .LBB0_3: ! %end
31 ; CHECK-NEXT:    call f3
32 ; CHECK-NEXT:    nop
33 ; CHECK-NEXT:    ret
34 ; CHECK-NEXT:    restore
35 entry:
36   %cond = icmp eq i32 %sel, 0
37   br i1 %cond, label %tbb, label %fbb
39 fbb:
40   call void @f2()
41   br label %end
43 tbb:
44   call void @f1()
45   br label %end
47 end:
48   call void @f3()
49   ret void
52 define void @brxcc(i64 %sel) {
53 ; CHECK-LABEL: brxcc:
54 ; CHECK:         .cfi_startproc
55 ; CHECK-NEXT:  ! %bb.0: ! %entry
56 ; CHECK-NEXT:    save %sp, -176, %sp
57 ; CHECK-NEXT:    .cfi_def_cfa_register %fp
58 ; CHECK-NEXT:    .cfi_window_save
59 ; CHECK-NEXT:    .cfi_register %o7, %i7
60 ; CHECK-NEXT:    cmp %i0, 1
61 ; CHECK-NEXT:    bne %xcc, .LBB1_2
62 ; CHECK-NEXT:    nop
63 ; CHECK-NEXT:  ! %bb.1: ! %tbb
64 ; CHECK-NEXT:    call f1
65 ; CHECK-NEXT:    nop
66 ; CHECK-NEXT:    ba .LBB1_3
67 ; CHECK-NEXT:    nop
68 ; CHECK-NEXT:  .LBB1_2: ! %fbb
69 ; CHECK-NEXT:    call f2
70 ; CHECK-NEXT:    nop
71 ; CHECK-NEXT:  .LBB1_3: ! %end
72 ; CHECK-NEXT:    call f3
73 ; CHECK-NEXT:    nop
74 ; CHECK-NEXT:    ret
75 ; CHECK-NEXT:    restore
76 entry:
77   ;; Using 1 here because compares with zero
78   ;; will be lowered into a `brz`, not `be`.
79   %cond = icmp eq i64 %sel, 1
80   br i1 %cond, label %tbb, label %fbb
82 fbb:
83   call void @f2()
84   br label %end
86 tbb:
87   call void @f1()
88   br label %end
90 end:
91   call void @f3()
92   ret void
95 define void @brreg(i64 %sel) {
96 ; CHECK-LABEL: brreg:
97 ; CHECK:         .cfi_startproc
98 ; CHECK-NEXT:  ! %bb.0: ! %entry
99 ; CHECK-NEXT:    save %sp, -176, %sp
100 ; CHECK-NEXT:    .cfi_def_cfa_register %fp
101 ; CHECK-NEXT:    .cfi_window_save
102 ; CHECK-NEXT:    .cfi_register %o7, %i7
103 ; CHECK-NEXT:    brz %i0, .LBB2_2
104 ; CHECK-NEXT:    nop
105 ; CHECK-NEXT:  ! %bb.1: ! %fbb
106 ; CHECK-NEXT:    call f2
107 ; CHECK-NEXT:    nop
108 ; CHECK-NEXT:    ba .LBB2_3
109 ; CHECK-NEXT:    nop
110 ; CHECK-NEXT:  .LBB2_2: ! %tbb
111 ; CHECK-NEXT:    call f1
112 ; CHECK-NEXT:    nop
113 ; CHECK-NEXT:  .LBB2_3: ! %end
114 ; CHECK-NEXT:    call f3
115 ; CHECK-NEXT:    nop
116 ; CHECK-NEXT:    ret
117 ; CHECK-NEXT:    restore
118 entry:
119   %cond = icmp eq i64 %sel, 0
120   br i1 %cond, label %tbb, label %fbb
122 fbb:
123   call void @f2()
124   br label %end
126 tbb:
127   call void @f1()
128   br label %end
130 end:
131   call void @f3()
132   ret void
135 declare void @f1(...)
137 declare void @f2(...)
139 declare void @f3(...)