[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / dag-combine-03.ll
blob3625ac68b327f78cfb6d1aab4db410f218065d9c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 < %s  | FileCheck %s
4 ; Test that DAGCombiner gets helped by getKnownBitsForTargetNode() when
5 ; BITCAST nodes are involved on a big-endian target.
7 ; The EXTRACT_VECTOR_ELT is done first into an i32, and then AND:ed with
8 ; 1. The AND is not actually necessary since the element contains a CC (i1)
9 ; value. Test that the BITCAST nodes in the DAG when computing KnownBits is
10 ; handled so that the AND is removed. If this succeeds, this results in a CHI
11 ; instead of TMLL.
13 define void @fun(i64 %a0) {
14 ; CHECK-LABEL: fun:
15 ; CHECK:       # %bb.0: # %entry
16 ; CHECK-NEXT:    lghi %r1, 0
17 ; CHECK-NEXT:  .LBB0_1: # %lab0
18 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
19 ; CHECK-NEXT:    la %r0, 2(%r1)
20 ; CHECK-NEXT:    la %r1, 1(%r1)
21 ; CHECK-NEXT:    cgr %r1, %r2
22 ; CHECK-NEXT:    lhi %r3, 0
23 ; CHECK-NEXT:    lochie %r3, 1
24 ; CHECK-NEXT:    cgr %r0, %r2
25 ; CHECK-NEXT:    lhi %r0, 0
26 ; CHECK-NEXT:    lochie %r0, 1
27 ; CHECK-NEXT:    vlvgp %v0, %r3, %r3
28 ; CHECK-NEXT:    vlvgp %v1, %r0, %r0
29 ; CHECK-NEXT:    vx %v0, %v0, %v1
30 ; CHECK-NEXT:    vlgvf %r0, %v0, 1
31 ; CHECK-NEXT:    chi %r0, 0
32 ; CHECK-NEXT:    locghie %r1, 0
33 ; CHECK-NEXT:    j .LBB0_1
34 entry:
35   br label %lab0
37 lab0:
38   %phi = phi i64 [ %sel, %lab0 ], [ 0, %entry ]
39   %add = add nuw nsw i64 %phi, 1
40   %add2 = add nuw nsw i64 %phi, 2
41   %cmp = icmp eq i64 %add, %a0
42   %cmp2 = icmp eq i64 %add2, %a0
43   %ins = insertelement <2 x i1> undef, i1 %cmp, i32 0
44   %ins2 = insertelement <2 x i1> undef, i1 %cmp2, i32 0
45   %xor = xor <2 x i1> %ins, %ins2
46   %extr = extractelement <2 x i1> %xor, i32 0
48   %sel = select i1 %extr, i64 %add, i64 0
49   br label %lab0