xref: /llvm-project/llvm/test/Transforms/LoopVectorize/blend-in-header.ll (revision f0d5104c944b329c479802788571ed6df41e0e86)
134777c23SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
234777c23SFlorian Hahn; RUN: opt -p loop-vectorize -force-vector-width=4 -force-vector-interleave=1 -S %s | FileCheck %s
334777c23SFlorian Hahn
434777c23SFlorian Hahntarget datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
534777c23SFlorian Hahn
634777c23SFlorian Hahn; Test with blend recipe in header VPBB, from
734777c23SFlorian Hahn; https://github.com/llvm/llvm-project/issues/88297.
834777c23SFlorian Hahndefine i64 @pr88297() {
934777c23SFlorian Hahn; CHECK-LABEL: define i64 @pr88297() {
1034777c23SFlorian Hahn; CHECK-NEXT:  entry:
1134777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1234777c23SFlorian Hahn; CHECK:       vector.ph:
1334777c23SFlorian Hahn; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
1434777c23SFlorian Hahn; CHECK:       vector.body:
1534777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
1634777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
1734777c23SFlorian Hahn; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
1834777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP0]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
1934777c23SFlorian Hahn; CHECK:       middle.block:
2034777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]]
2134777c23SFlorian Hahn; CHECK:       scalar.ph:
2234777c23SFlorian Hahn; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 1000, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
2334777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
2434777c23SFlorian Hahn; CHECK:       loop.header:
2534777c23SFlorian Hahn; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
2634777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[LOOP_LATCH]], label [[THEN:%.*]]
2734777c23SFlorian Hahn; CHECK:       then:
2834777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_LATCH]]
2934777c23SFlorian Hahn; CHECK:       loop.latch:
3034777c23SFlorian Hahn; CHECK-NEXT:    [[R:%.*]] = phi i64 [ 1, [[THEN]] ], [ 0, [[LOOP_HEADER]] ]
3134777c23SFlorian Hahn; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 1
3234777c23SFlorian Hahn; CHECK-NEXT:    [[ICMP:%.*]] = icmp sgt i32 [[IV]], 1000
3334777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[ICMP]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP3:![0-9]+]]
3434777c23SFlorian Hahn; CHECK:       exit:
3534777c23SFlorian Hahn; CHECK-NEXT:    [[R_LCSSA:%.*]] = phi i64 [ [[R]], [[LOOP_LATCH]] ], [ 1, [[MIDDLE_BLOCK]] ]
3634777c23SFlorian Hahn; CHECK-NEXT:    ret i64 [[R_LCSSA]]
3734777c23SFlorian Hahn;
3834777c23SFlorian Hahnentry:
3934777c23SFlorian Hahn  br label %loop.header
4034777c23SFlorian Hahn
4134777c23SFlorian Hahnloop.header:
4234777c23SFlorian Hahn  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
4334777c23SFlorian Hahn  br i1 false, label %loop.latch, label %then
4434777c23SFlorian Hahn
4534777c23SFlorian Hahnthen:
4634777c23SFlorian Hahn  br label %loop.latch
4734777c23SFlorian Hahn
4834777c23SFlorian Hahnloop.latch:
4934777c23SFlorian Hahn  %r = phi i64 [ 1, %then ], [ 0, %loop.header ]
5034777c23SFlorian Hahn  %iv.next = add i32 %iv, 1
5134777c23SFlorian Hahn  %icmp = icmp sgt i32 %iv, 1000
5234777c23SFlorian Hahn  br i1 %icmp, label %exit, label %loop.header
5334777c23SFlorian Hahn
5434777c23SFlorian Hahnexit:
5534777c23SFlorian Hahn  %r.lcssa = phi i64 [ %r, %loop.latch ]
5634777c23SFlorian Hahn  ret i64 %r.lcssa
5734777c23SFlorian Hahn}
5834777c23SFlorian Hahn
5934777c23SFlorian Hahndefine i64 @pr88297_incoming_ops_reordered() {
6034777c23SFlorian Hahn; CHECK-LABEL: define i64 @pr88297_incoming_ops_reordered() {
6134777c23SFlorian Hahn; CHECK-NEXT:  entry:
6234777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
6334777c23SFlorian Hahn; CHECK:       vector.ph:
6434777c23SFlorian Hahn; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
6534777c23SFlorian Hahn; CHECK:       vector.body:
6634777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
6734777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
6834777c23SFlorian Hahn; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
6934777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP0]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
7034777c23SFlorian Hahn; CHECK:       middle.block:
7134777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]]
7234777c23SFlorian Hahn; CHECK:       scalar.ph:
7334777c23SFlorian Hahn; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 1000, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
7434777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
7534777c23SFlorian Hahn; CHECK:       loop.header:
7634777c23SFlorian Hahn; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
7734777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[LOOP_LATCH]], label [[THEN:%.*]]
7834777c23SFlorian Hahn; CHECK:       then:
7934777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_LATCH]]
8034777c23SFlorian Hahn; CHECK:       loop.latch:
8134777c23SFlorian Hahn; CHECK-NEXT:    [[R:%.*]] = phi i64 [ 0, [[LOOP_HEADER]] ], [ 1, [[THEN]] ]
8234777c23SFlorian Hahn; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 1
8334777c23SFlorian Hahn; CHECK-NEXT:    [[ICMP:%.*]] = icmp sgt i32 [[IV]], 1000
8434777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[ICMP]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP5:![0-9]+]]
8534777c23SFlorian Hahn; CHECK:       exit:
8634777c23SFlorian Hahn; CHECK-NEXT:    [[R_LCSSA:%.*]] = phi i64 [ [[R]], [[LOOP_LATCH]] ], [ 1, [[MIDDLE_BLOCK]] ]
8734777c23SFlorian Hahn; CHECK-NEXT:    ret i64 [[R_LCSSA]]
8834777c23SFlorian Hahn;
8934777c23SFlorian Hahnentry:
9034777c23SFlorian Hahn  br label %loop.header
9134777c23SFlorian Hahn
9234777c23SFlorian Hahnloop.header:
9334777c23SFlorian Hahn  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
9434777c23SFlorian Hahn  br i1 false, label %loop.latch, label %then
9534777c23SFlorian Hahn
9634777c23SFlorian Hahnthen:
9734777c23SFlorian Hahn  br label %loop.latch
9834777c23SFlorian Hahn
9934777c23SFlorian Hahnloop.latch:
10034777c23SFlorian Hahn  %r = phi i64 [ 0, %loop.header ], [ 1, %then ]
10134777c23SFlorian Hahn  %iv.next = add i32 %iv, 1
10234777c23SFlorian Hahn  %icmp = icmp sgt i32 %iv, 1000
10334777c23SFlorian Hahn  br i1 %icmp, label %exit, label %loop.header
10434777c23SFlorian Hahn
10534777c23SFlorian Hahnexit:
10634777c23SFlorian Hahn  %r.lcssa = phi i64 [ %r, %loop.latch ]
10734777c23SFlorian Hahn  ret i64 %r.lcssa
10834777c23SFlorian Hahn}
10934777c23SFlorian Hahn
11034777c23SFlorian Hahndefine i64 @invar_cond(i1 %c) {
11134777c23SFlorian Hahn; CHECK-LABEL: define i64 @invar_cond(
11234777c23SFlorian Hahn; CHECK-SAME: i1 [[C:%.*]]) {
11334777c23SFlorian Hahn; CHECK-NEXT:  entry:
11434777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
11534777c23SFlorian Hahn; CHECK:       vector.ph:
11634777c23SFlorian Hahn; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i1> poison, i1 [[C]], i64 0
11734777c23SFlorian Hahn; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i1> [[BROADCAST_SPLATINSERT]], <4 x i1> poison, <4 x i32> zeroinitializer
11838fffa63SPaul Walker; CHECK-NEXT:    [[PREDPHI:%.*]] = select <4 x i1> [[BROADCAST_SPLAT]], <4 x i64> zeroinitializer, <4 x i64> splat (i64 1)
11934777c23SFlorian Hahn; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
12034777c23SFlorian Hahn; CHECK:       vector.body:
12134777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
12234777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
12334777c23SFlorian Hahn; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
12434777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP0]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
12534777c23SFlorian Hahn; CHECK:       middle.block:
12634777c23SFlorian Hahn; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 3
12734777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]]
12834777c23SFlorian Hahn; CHECK:       scalar.ph:
12934777c23SFlorian Hahn; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 1000, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
13034777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
13134777c23SFlorian Hahn; CHECK:       loop.header:
13234777c23SFlorian Hahn; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
13334777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[C]], label [[LOOP_LATCH]], label [[THEN:%.*]]
13434777c23SFlorian Hahn; CHECK:       then:
13534777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_LATCH]]
13634777c23SFlorian Hahn; CHECK:       loop.latch:
13734777c23SFlorian Hahn; CHECK-NEXT:    [[R:%.*]] = phi i64 [ 1, [[THEN]] ], [ 0, [[LOOP_HEADER]] ]
13834777c23SFlorian Hahn; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 1
13934777c23SFlorian Hahn; CHECK-NEXT:    [[ICMP:%.*]] = icmp sgt i32 [[IV]], 1000
14034777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[ICMP]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP7:![0-9]+]]
14134777c23SFlorian Hahn; CHECK:       exit:
14234777c23SFlorian Hahn; CHECK-NEXT:    [[R_LCSSA:%.*]] = phi i64 [ [[R]], [[LOOP_LATCH]] ], [ [[TMP1]], [[MIDDLE_BLOCK]] ]
14334777c23SFlorian Hahn; CHECK-NEXT:    ret i64 [[R_LCSSA]]
14434777c23SFlorian Hahn;
14534777c23SFlorian Hahnentry:
14634777c23SFlorian Hahn  br label %loop.header
14734777c23SFlorian Hahn
14834777c23SFlorian Hahnloop.header:
14934777c23SFlorian Hahn  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
15034777c23SFlorian Hahn  br i1 %c, label %loop.latch, label %then
15134777c23SFlorian Hahn
15234777c23SFlorian Hahnthen:
15334777c23SFlorian Hahn  br label %loop.latch
15434777c23SFlorian Hahn
15534777c23SFlorian Hahnloop.latch:
15634777c23SFlorian Hahn  %r = phi i64 [ 1, %then ], [ 0, %loop.header ]
15734777c23SFlorian Hahn  %iv.next = add i32 %iv, 1
15834777c23SFlorian Hahn  %icmp = icmp sgt i32 %iv, 1000
15934777c23SFlorian Hahn  br i1 %icmp, label %exit, label %loop.header
16034777c23SFlorian Hahn
16134777c23SFlorian Hahnexit:
16234777c23SFlorian Hahn  %r.lcssa = phi i64 [ %r, %loop.latch ]
16334777c23SFlorian Hahn  ret i64 %r.lcssa
16434777c23SFlorian Hahn}
16534777c23SFlorian Hahn
16634777c23SFlorian Hahndefine i64 @invar_cond_incoming_ops_reordered(i1 %c) {
16734777c23SFlorian Hahn; CHECK-LABEL: define i64 @invar_cond_incoming_ops_reordered(
16834777c23SFlorian Hahn; CHECK-SAME: i1 [[C:%.*]]) {
16934777c23SFlorian Hahn; CHECK-NEXT:  entry:
17034777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
17134777c23SFlorian Hahn; CHECK:       vector.ph:
17234777c23SFlorian Hahn; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i1> poison, i1 [[C]], i64 0
17334777c23SFlorian Hahn; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i1> [[BROADCAST_SPLATINSERT]], <4 x i1> poison, <4 x i32> zeroinitializer
174*f0d5104cSLuke Lau; CHECK-NEXT:    [[TMP1:%.*]] = xor <4 x i1> [[BROADCAST_SPLAT]], splat (i1 true)
175*f0d5104cSLuke Lau; CHECK-NEXT:    [[PREDPHI:%.*]] = select <4 x i1> [[TMP1]], <4 x i64> splat (i64 1), <4 x i64> zeroinitializer
17634777c23SFlorian Hahn; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
17734777c23SFlorian Hahn; CHECK:       vector.body:
17834777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
17934777c23SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
18034777c23SFlorian Hahn; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
18134777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP0]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
18234777c23SFlorian Hahn; CHECK:       middle.block:
18334777c23SFlorian Hahn; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 3
18434777c23SFlorian Hahn; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]]
18534777c23SFlorian Hahn; CHECK:       scalar.ph:
18634777c23SFlorian Hahn; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 1000, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
18734777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
18834777c23SFlorian Hahn; CHECK:       loop.header:
18934777c23SFlorian Hahn; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
19034777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[C]], label [[LOOP_LATCH]], label [[THEN:%.*]]
19134777c23SFlorian Hahn; CHECK:       then:
19234777c23SFlorian Hahn; CHECK-NEXT:    br label [[LOOP_LATCH]]
19334777c23SFlorian Hahn; CHECK:       loop.latch:
19434777c23SFlorian Hahn; CHECK-NEXT:    [[R:%.*]] = phi i64 [ 0, [[LOOP_HEADER]] ], [ 1, [[THEN]] ]
19534777c23SFlorian Hahn; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 1
19634777c23SFlorian Hahn; CHECK-NEXT:    [[ICMP:%.*]] = icmp sgt i32 [[IV]], 1000
19734777c23SFlorian Hahn; CHECK-NEXT:    br i1 [[ICMP]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP9:![0-9]+]]
19834777c23SFlorian Hahn; CHECK:       exit:
19934777c23SFlorian Hahn; CHECK-NEXT:    [[R_LCSSA:%.*]] = phi i64 [ [[R]], [[LOOP_LATCH]] ], [ [[TMP2]], [[MIDDLE_BLOCK]] ]
20034777c23SFlorian Hahn; CHECK-NEXT:    ret i64 [[R_LCSSA]]
20134777c23SFlorian Hahn;
20234777c23SFlorian Hahnentry:
20334777c23SFlorian Hahn  br label %loop.header
20434777c23SFlorian Hahn
20534777c23SFlorian Hahnloop.header:
20634777c23SFlorian Hahn  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
20734777c23SFlorian Hahn  br i1 %c, label %loop.latch, label %then
20834777c23SFlorian Hahn
20934777c23SFlorian Hahnthen:
21034777c23SFlorian Hahn  br label %loop.latch
21134777c23SFlorian Hahn
21234777c23SFlorian Hahnloop.latch:
21334777c23SFlorian Hahn  %r = phi i64 [ 0, %loop.header ], [ 1, %then ]
21434777c23SFlorian Hahn  %iv.next = add i32 %iv, 1
21534777c23SFlorian Hahn  %icmp = icmp sgt i32 %iv, 1000
21634777c23SFlorian Hahn  br i1 %icmp, label %exit, label %loop.header
21734777c23SFlorian Hahn
21834777c23SFlorian Hahnexit:
21934777c23SFlorian Hahn  %r.lcssa = phi i64 [ %r, %loop.latch ]
22034777c23SFlorian Hahn  ret i64 %r.lcssa
22134777c23SFlorian Hahn}
22234777c23SFlorian Hahn;.
22334777c23SFlorian Hahn; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
22434777c23SFlorian Hahn; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
22534777c23SFlorian Hahn; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
22634777c23SFlorian Hahn; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]}
22734777c23SFlorian Hahn; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]}
22834777c23SFlorian Hahn; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]}
22934777c23SFlorian Hahn; CHECK: [[LOOP6]] = distinct !{[[LOOP6]], [[META1]], [[META2]]}
23034777c23SFlorian Hahn; CHECK: [[LOOP7]] = distinct !{[[LOOP7]], [[META2]], [[META1]]}
23134777c23SFlorian Hahn; CHECK: [[LOOP8]] = distinct !{[[LOOP8]], [[META1]], [[META2]]}
23234777c23SFlorian Hahn; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META2]], [[META1]]}
23334777c23SFlorian Hahn;.
234