xref: /llvm-project/llvm/test/CodeGen/RISCV/branch_zero.ll (revision 3a3f725a3cdc44cacb8f9847404a148ee056c913)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
3; RUN:   | FileCheck %s
4
5define void @foo(i16 %finder_idx) {
6; CHECK-LABEL: foo:
7; CHECK:       # %bb.0: # %entry
8; CHECK-NEXT:  .LBB0_1: # %for.body
9; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
10; CHECK-NEXT:    slli a0, a0, 48
11; CHECK-NEXT:    bltz a0, .LBB0_4
12; CHECK-NEXT:  # %bb.2: # %while.cond.preheader.i
13; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1
14; CHECK-NEXT:    li a0, 0
15; CHECK-NEXT:    bnez zero, .LBB0_1
16; CHECK-NEXT:  # %bb.3: # %while.body
17; CHECK-NEXT:  .LBB0_4: # %while.cond1.preheader.i
18entry:
19  br label %for.body
20
21for.body:
22  %info = phi i16 [ 0, %if.then ], [ %finder_idx, %entry ]
23  %cmp.i = icmp sgt i16 %info, -1
24  %tobool = icmp eq ptr poison, null
25  br i1 %cmp.i, label %while.cond.preheader.i, label %while.cond1.preheader.i
26
27while.cond1.preheader.i:
28  unreachable
29
30while.cond.preheader.i:
31  br label %exit
32
33exit:
34  br i1 %tobool, label %exit1, label %while.body
35
36while.body:
37  unreachable
38
39exit1:
40  br label %if.then
41
42if.then:
43  br label %for.body
44}
45
46define void @bar(i16 %finder_idx) {
47; CHECK-LABEL: bar:
48; CHECK:       # %bb.0: # %entry
49; CHECK-NEXT:  .LBB1_1: # %for.body
50; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
51; CHECK-NEXT:    slli a0, a0, 48
52; CHECK-NEXT:    bgez a0, .LBB1_4
53; CHECK-NEXT:  # %bb.2: # %while.cond.preheader.i
54; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1
55; CHECK-NEXT:    li a0, 0
56; CHECK-NEXT:    bnez zero, .LBB1_1
57; CHECK-NEXT:  # %bb.3: # %while.body
58; CHECK-NEXT:  .LBB1_4: # %while.cond1.preheader.i
59entry:
60  br label %for.body
61
62for.body:
63  %info = phi i16 [ 0, %if.then ], [ %finder_idx, %entry ]
64  %cmp.i = icmp sle i16 %info, -1
65  %tobool = icmp eq ptr poison, null
66  br i1 %cmp.i, label %while.cond.preheader.i, label %while.cond1.preheader.i
67
68while.cond1.preheader.i:
69  unreachable
70
71while.cond.preheader.i:
72  br label %exit
73
74exit:
75  br i1 %tobool, label %exit1, label %while.body
76
77while.body:
78  unreachable
79
80exit1:
81  br label %if.then
82
83if.then:
84  br label %for.body
85}
86