1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-pc-linux-gnu | FileCheck %s -check-prefix=DEFAULT
3; RUN: llc < %s -mtriple=i686-pc-linux-gnu -x86-experimental-pref-innermost-loop-alignment=5 | FileCheck %s -check-prefix=ALIGN32
4; RUN: llc < %s -mtriple=i686-pc-linux-gnu -x86-experimental-pref-loop-alignment=5 -x86-experimental-pref-innermost-loop-alignment=6 | FileCheck %s -check-prefix=ALIGN64
5
6declare void @foo()
7
8define void @test(i32 %n, i32 %m) {
9; DEFAULT-LABEL: test:
10; DEFAULT:         .p2align 4, 0x90
11; DEFAULT-NEXT:  .LBB0_1: # %outer
12; DEFAULT-NEXT:    # =>This Loop Header: Depth=1
13; DEFAULT-NEXT:    # Child Loop BB0_2 Depth 2
14; DEFAULT:         .p2align 4, 0x90
15; DEFAULT-NEXT:  .LBB0_2: # %inner
16; DEFAULT-NEXT:    # Parent Loop BB0_1 Depth=1
17
18; ALIGN32-LABEL: test:
19; ALIGN32:         .p2align 4, 0x90
20; ALIGN32-NEXT:  .LBB0_1: # %outer
21; ALIGN32-NEXT:    # =>This Loop Header: Depth=1
22; ALIGN32-NEXT:    # Child Loop BB0_2 Depth 2
23; ALIGN32:         .p2align 5, 0x90
24; ALIGN32-NEXT:  .LBB0_2: # %inner
25; ALIGN32-NEXT:    # Parent Loop BB0_1 Depth=1
26; ALIGN32-NEXT:    # => This Inner Loop Header: Depth=2
27
28; ALIGN64-LABEL: test:
29; ALIGN64:         .p2align 5, 0x90
30; ALIGN64-NEXT:  .LBB0_1: # %outer
31; ALIGN64-NEXT:    # =>This Loop Header: Depth=1
32; ALIGN64-NEXT:    # Child Loop BB0_2 Depth 2
33; ALIGN64:         .p2align 6, 0x90
34; ALIGN64-NEXT:  .LBB0_2: # %inner
35; ALIGN64-NEXT:    # Parent Loop BB0_1 Depth=1
36; ALIGN64-NEXT:    # => This Inner Loop Header: Depth=2
37
38entry:
39  br label %outer
40
41outer:
42  %outer.iv = phi i32 [0, %entry], [%outer.iv.next, %outer_bb]
43  br label %inner
44
45inner:
46  %inner.iv = phi i32 [0, %outer], [%inner.iv.next, %inner]
47  call void @foo()
48  %inner.iv.next = add i32 %inner.iv, 1
49  %inner.cond = icmp ne i32 %inner.iv.next, %m
50  br i1 %inner.cond, label %inner, label %outer_bb
51
52outer_bb:
53  %outer.iv.next = add i32 %outer.iv, 1
54  %outer.cond = icmp ne i32 %outer.iv.next, %n
55  br i1 %outer.cond, label %outer, label %exit
56
57exit:
58  ret void
59}
60