xref: /llvm-project/llvm/test/CodeGen/AArch64/nomerge.ll (revision 3977b77a6bb780b02559530a96597cdb1c0a5bf6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=aarch64 -o - | FileCheck %s
3
4define void @foo(i32 %i) nounwind {
5; CHECK-LABEL: foo:
6; CHECK:       // %bb.0: // %entry
7; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
8; CHECK-NEXT:    cmp w0, #7
9; CHECK-NEXT:    b.eq .LBB0_3
10; CHECK-NEXT:  // %bb.1: // %entry
11; CHECK-NEXT:    cmp w0, #5
12; CHECK-NEXT:    b.ne .LBB0_4
13; CHECK-NEXT:  // %bb.2: // %if.then
14; CHECK-NEXT:    bl bar
15; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
16; CHECK-NEXT:    b bar
17; CHECK-NEXT:  .LBB0_3: // %if.then2
18; CHECK-NEXT:    bl bar
19; CHECK-NEXT:  .LBB0_4: // %if.end3
20; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
21; CHECK-NEXT:    b bar
22entry:
23  switch i32 %i, label %if.end3 [
24    i32 5, label %if.then
25    i32 7, label %if.then2
26  ]
27
28if.then:
29  tail call void @bar() #0
30  br label %if.end3
31
32if.then2:
33  tail call void @bar() #0
34  br label %if.end3
35
36if.end3:
37  tail call void @bar() #0
38  ret void
39}
40
41define void @foo_tail(i1 %i) nounwind {
42; CHECK-LABEL: foo_tail:
43; CHECK:       // %bb.0: // %entry
44; CHECK-NEXT:    tbz w0, #0, .LBB1_2
45; CHECK-NEXT:  // %bb.1: // %if.then
46; CHECK-NEXT:    b bar
47; CHECK-NEXT:  .LBB1_2: // %if.else
48; CHECK-NEXT:    b bar
49entry:
50  br i1 %i, label %if.then, label %if.else
51
52if.then:
53  tail call void @bar() #0
54  br label %if.end
55
56if.else:
57  tail call void @bar() #0
58  br label %if.end
59
60if.end:
61  ret void
62}
63
64declare void @bar()
65
66attributes #0 = { nomerge }
67