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