xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/AArch64/extracts-from-scalarizable-vector.ll (revision 9c7aab362a4579d5ce26f4af2564b04720ec23a2)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -S -passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
3
4define i1 @degenerate() {
5; CHECK-LABEL: define i1 @degenerate() {
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <4 x fp128> zeroinitializer, i32 0
8; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt fp128 [[TMP0]], 0xL00000000000000000000000000000000
9; CHECK-NEXT:    [[CMP3:%.*]] = fcmp olt fp128 [[TMP0]], 0xL00000000000000000000000000000000
10; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[CMP]], [[CMP3]]
11; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x fp128> zeroinitializer, i32 0
12; CHECK-NEXT:    [[CMP6:%.*]] = fcmp ogt fp128 [[TMP1]], 0xL00000000000000000000000000000000
13; CHECK-NEXT:    [[OR_COND29:%.*]] = select i1 [[OR_COND]], i1 [[CMP6]], i1 false
14; CHECK-NEXT:    [[CMP10:%.*]] = fcmp olt fp128 [[TMP1]], 0xL00000000000000000000000000000000
15; CHECK-NEXT:    [[OR_COND30:%.*]] = select i1 [[OR_COND29]], i1 [[CMP10]], i1 false
16; CHECK-NEXT:    ret i1 [[OR_COND30]]
17;
18entry:
19  %0 = extractelement <4 x fp128> zeroinitializer, i32 0
20  %cmp = fcmp ogt fp128 %0, 0xL00000000000000000000000000000000
21  %cmp3 = fcmp olt fp128 %0, 0xL00000000000000000000000000000000
22  %or.cond = and i1 %cmp, %cmp3
23  %1 = extractelement <4 x fp128> zeroinitializer, i32 0
24  %cmp6 = fcmp ogt fp128 %1, 0xL00000000000000000000000000000000
25  %or.cond29 = select i1 %or.cond, i1 %cmp6, i1 false
26  %cmp10 = fcmp olt fp128 %1, 0xL00000000000000000000000000000000
27  %or.cond30 = select i1 %or.cond29, i1 %cmp10, i1 false
28  ret i1 %or.cond30
29}
30
31define i1 @with_inputs(<4 x fp128> %a) {
32; CHECK-LABEL: define i1 @with_inputs
33; CHECK-SAME: (<4 x fp128> [[A:%.*]]) {
34; CHECK-NEXT:  entry:
35; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <4 x fp128> [[A]], i32 0
36; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt fp128 [[TMP0]], 0xL00000000000000000000000000000000
37; CHECK-NEXT:    [[CMP3:%.*]] = fcmp olt fp128 [[TMP0]], 0xL00000000000000000000000000000000
38; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[CMP]], [[CMP3]]
39; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x fp128> [[A]], i32 1
40; CHECK-NEXT:    [[CMP6:%.*]] = fcmp ogt fp128 [[TMP1]], 0xL00000000000000000000000000000000
41; CHECK-NEXT:    [[OR_COND29:%.*]] = select i1 [[OR_COND]], i1 [[CMP6]], i1 false
42; CHECK-NEXT:    [[CMP10:%.*]] = fcmp olt fp128 [[TMP1]], 0xL00000000000000000000000000000000
43; CHECK-NEXT:    [[OR_COND30:%.*]] = select i1 [[OR_COND29]], i1 [[CMP10]], i1 false
44; CHECK-NEXT:    ret i1 [[OR_COND30]]
45;
46entry:
47  %0 = extractelement <4 x fp128> %a, i32 0
48  %cmp = fcmp ogt fp128 %0, 0xL00000000000000000000000000000000
49  %cmp3 = fcmp olt fp128 %0, 0xL00000000000000000000000000000000
50  %or.cond = and i1 %cmp, %cmp3
51  %1 = extractelement <4 x fp128> %a, i32 1
52  %cmp6 = fcmp ogt fp128 %1, 0xL00000000000000000000000000000000
53  %or.cond29 = select i1 %or.cond, i1 %cmp6, i1 false
54  %cmp10 = fcmp olt fp128 %1, 0xL00000000000000000000000000000000
55  %or.cond30 = select i1 %or.cond29, i1 %cmp10, i1 false
56  ret i1 %or.cond30
57}
58