[SLP] Check for PHI nodes (potentially cycles!) when checking depende… · llvm/llvm-project@098492a (original) (raw)
``
1
`+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
`
``
2
`+
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=haswell < %s | FileCheck %s
`
``
3
+
``
4
`+
define void @test(float %0) {
`
``
5
`+
; CHECK-LABEL: define void @test(
`
``
6
`+
; CHECK-SAME: float [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
`
``
7
`+
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x float> <float 0.000000e+00, float poison>, float [[TMP0]], i32 1
`
``
8
`+
; CHECK-NEXT: [[TMP3:%.*]] = fdiv <2 x float> [[TMP2]], zeroinitializer
`
``
9
`+
; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x float> <float poison, float 0.000000e+00>, float [[TMP0]], i32 0
`
``
10
`+
; CHECK-NEXT: [[TMP5:%.*]] = fdiv <2 x float> [[TMP4]], zeroinitializer
`
``
11
`+
; CHECK-NEXT: br label %[[BB6:.*]]
`
``
12
`+
; CHECK: [[BB6]]:
`
``
13
`+
; CHECK-NEXT: [[TMP7:%.*]] = fmul <2 x float> [[TMP5]], zeroinitializer
`
``
14
`+
; CHECK-NEXT: [[TMP8:%.*]] = fsub <2 x float> zeroinitializer, [[TMP7]]
`
``
15
`+
; CHECK-NEXT: br label %[[BB10:.*]]
`
``
16
`+
; CHECK: [[BB9:.*]]:
`
``
17
`+
; CHECK-NEXT: br label %[[BB10]]
`
``
18
`+
; CHECK: [[BB10]]:
`
``
19
`+
; CHECK-NEXT: [[TMP11:%.*]] = phi <2 x float> [ [[TMP8]], %[[BB6]] ], [ poison, %[[BB9]] ]
`
``
20
`+
; CHECK-NEXT: br label %[[BB12:.*]]
`
``
21
`+
; CHECK: [[BB12]]:
`
``
22
`+
; CHECK-NEXT: [[TMP13:%.*]] = fmul <2 x float> [[TMP3]], zeroinitializer
`
``
23
`+
; CHECK-NEXT: [[TMP14:%.*]] = fsub <2 x float> [[TMP11]], [[TMP13]]
`
``
24
`+
; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x float> [[TMP14]], i32 0
`
``
25
`+
; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x float> [[TMP14]], i32 1
`
``
26
`+
; CHECK-NEXT: [[TMP17:%.*]] = fadd float [[TMP15]], [[TMP16]]
`
``
27
`+
; CHECK-NEXT: [[TMP18:%.*]] = call float @llvm.fabs.f32(float [[TMP17]])
`
``
28
`+
; CHECK-NEXT: ret void
`
``
29
`+
;
`
``
30
`+
%2 = fdiv float 0.000000e+00, 0.000000e+00
`
``
31
`+
%3 = fdiv float 0.000000e+00, 0.000000e+00
`
``
32
`+
%4 = fdiv float %0, 0.000000e+00
`
``
33
`+
br label %5
`
``
34
+
``
35
`+
5:
`
``
36
`+
%6 = fmul float %4, 0.000000e+00
`
``
37
`+
%7 = fsub float 0.000000e+00, %6
`
``
38
`+
%8 = fmul float %3, 0.000000e+00
`
``
39
`+
%9 = fsub float 0.000000e+00, %8
`
``
40
`+
br label %11
`
``
41
+
``
42
`+
10:
`
``
43
`+
br label %11
`
``
44
+
``
45
`+
11:
`
``
46
`+
%12 = phi float [ %7, %5 ], [ 0.000000e+00, %10 ]
`
``
47
`+
%13 = phi float [ %9, %5 ], [ 0.000000e+00, %10 ]
`
``
48
`+
br label %14
`
``
49
+
``
50
`+
14:
`
``
51
`+
%15 = fmul float %2, 0.000000e+00
`
``
52
`+
%16 = fsub float %12, %15
`
``
53
`+
%17 = fmul float %4, 0.000000e+00
`
``
54
`+
%18 = fsub float %13, %17
`
``
55
`+
%19 = fadd float %16, %18
`
``
56
`+
%20 = call float @llvm.fabs.f32(float %19)
`
``
57
`+
ret void
`
``
58
`+
}
`
``
59
+