Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / X86 / pr39160.ll
blobba777f52f532b131310fa96b7b88ceb24b0e4ebc
1 ; RUN: opt -passes=loop-vectorize -S < %s 2>&1 | FileCheck %s
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
4 target triple = "x86_64-unknown-linux-gnu"
6 ; Make sure that we can compile the test without crash.
7 define void @barney() {
9 ; CHECK-LABEL: @barney(
10 ; CHECK:       middle.block:
12 bb:
13   br label %bb2
15 bb2:                                              ; preds = %bb2, %bb
16   %tmp4 = icmp slt i32 undef, 0
17   br i1 %tmp4, label %bb2, label %bb5
19 bb5:                                              ; preds = %bb2
20   br label %bb19
22 bb18:                                             ; preds = %bb33
23   ret void
25 bb19:                                             ; preds = %bb36, %bb5
26   %tmp21 = phi i64 [ undef, %bb36 ], [ 2, %bb5 ]
27   %tmp22 = phi i32 [ %tmp65, %bb36 ], [ undef, %bb5 ]
28   br label %bb50
30 bb33:                                             ; preds = %bb62
31   br i1 undef, label %bb18, label %bb36
33 bb36:                                             ; preds = %bb33
34   br label %bb19
36 bb46:                                             ; preds = %bb50
37   br i1 undef, label %bb48, label %bb59
39 bb48:                                             ; preds = %bb46
40   %tmp49 = add i32 %tmp52, 14
41   ret void
43 bb50:                                             ; preds = %bb50, %bb19
44   %tmp52 = phi i32 [ %tmp55, %bb50 ], [ %tmp22, %bb19 ]
45   %tmp53 = phi i64 [ %tmp56, %bb50 ], [ 1, %bb19 ]
46   %tmp54 = add i32 %tmp52, 12
47   %tmp55 = add i32 %tmp52, 13
48   %tmp56 = add nuw nsw i64 %tmp53, 1
49   %tmp58 = icmp ult i64 %tmp53, undef
50   br i1 %tmp58, label %bb50, label %bb46
52 bb59:                                             ; preds = %bb46
53   br label %bb62
55 bb62:                                             ; preds = %bb68, %bb59
56   %tmp63 = phi i32 [ %tmp65, %bb68 ], [ %tmp55, %bb59 ]
57   %tmp64 = phi i64 [ %tmp66, %bb68 ], [ %tmp56, %bb59 ]
58   %tmp65 = add i32 %tmp63, 13
59   %tmp66 = add nuw nsw i64 %tmp64, 1
60   %tmp67 = icmp ult i64 %tmp66, %tmp21
61   br i1 %tmp67, label %bb68, label %bb33
63 bb68:                                             ; preds = %bb62
64   br label %bb62
67 define i32 @foo(ptr addrspace(1) %p) {
69 ; CHECK-LABEL: foo
70 ; CHECK:       middle.block:
72 entry:
73   br label %outer
75 outer:                                            ; preds = %outer_latch, %entry
76   %iv = phi i64 [ 2, %entry ], [ %iv.next, %outer_latch ]
77   br label %inner
79 inner:                                            ; preds = %inner, %outer
80   %0 = phi i32 [ %2, %inner ], [ 0, %outer ]
81   %a = phi i32 [ %3, %inner ], [ 1, %outer ]
82   %b = phi i32 [ %1, %inner ], [ 6, %outer ]
83   %1 = add i32 %b, 2
84   %2 = or i32 %0, %b
85   %3 = add nuw nsw i32 %a, 1
86   %4 = zext i32 %3 to i64
87   %5 = icmp ugt i64 %iv, %4
88   br i1 %5, label %inner, label %outer_latch
90 outer_latch:                                      ; preds = %inner
91   store atomic i32 %2, ptr addrspace(1) %p unordered, align 4
92   %iv.next = add nuw nsw i64 %iv, 1
93   %6 = icmp ugt i64 %iv, 63
94   br i1 %6, label %exit, label %outer
96 exit:                                             ; preds = %outer_latch
97   ret i32 0