xref: /llvm-project/llvm/test/CodeGen/LoongArch/nomerge.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s
3
4define void @foo(i32 %i) nounwind {
5; CHECK-LABEL: foo:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    addi.d $sp, $sp, -16
8; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
9; CHECK-NEXT:    addi.w $a0, $a0, 0
10; CHECK-NEXT:    ori $a1, $zero, 7
11; CHECK-NEXT:    beq $a0, $a1, .LBB0_3
12; CHECK-NEXT:  # %bb.1: # %entry
13; CHECK-NEXT:    ori $a1, $zero, 5
14; CHECK-NEXT:    bne $a0, $a1, .LBB0_4
15; CHECK-NEXT:  # %bb.2: # %if.then
16; CHECK-NEXT:    bl %plt(bar)
17; CHECK-NEXT:    b .LBB0_4
18; CHECK-NEXT:  .LBB0_3: # %if.then2
19; CHECK-NEXT:    bl %plt(bar)
20; CHECK-NEXT:  .LBB0_4: # %if.end3
21; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
22; CHECK-NEXT:    addi.d $sp, $sp, 16
23; CHECK-NEXT:    b %plt(bar)
24entry:
25  switch i32 %i, label %if.end3 [
26    i32 5, label %if.then
27    i32 7, label %if.then2
28  ]
29
30if.then:
31  tail call void @bar() #0
32  br label %if.end3
33
34if.then2:
35  tail call void @bar() #0
36  br label %if.end3
37
38if.end3:
39  tail call void @bar() #0
40  ret void
41}
42
43define void @foo_tail(i1 %i) nounwind {
44; CHECK-LABEL: foo_tail:
45; CHECK:       # %bb.0: # %entry
46; CHECK-NEXT:    andi $a0, $a0, 1
47; CHECK-NEXT:    beqz $a0, .LBB1_2
48; CHECK-NEXT:  # %bb.1: # %if.then
49; CHECK-NEXT:    b %plt(bar)
50; CHECK-NEXT:  .LBB1_2: # %if.else
51; CHECK-NEXT:    b %plt(bar)
52entry:
53  br i1 %i, label %if.then, label %if.else
54
55if.then:
56  tail call void @bar() #0
57  br label %if.end
58
59if.else:
60  tail call void @bar() #0
61  br label %if.end
62
63if.end:
64  ret void
65}
66
67declare void @bar()
68
69attributes #0 = { nomerge }
70