The LIT test cases were migrated with the script provided by Nikita Popov. No manual changes were made. Committed without review since no functional changes, after consultation with uweigand.
48 lines
1.7 KiB
LLVM
48 lines
1.7 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
|
|
|
|
; Test that the dag combiner can understand that some vector operands are
|
|
; all-zeros and then optimize the logical operations.
|
|
|
|
define void @f1(<2 x i64> %a0) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK: # %bb.0: # %bb
|
|
; CHECK-NEXT: vlrepg %v0, 0(%r1)
|
|
; CHECK-NEXT: vgbm %v1, 0
|
|
; CHECK-NEXT: vceqg %v2, %v24, %v1
|
|
; CHECK-NEXT: vn %v0, %v0, %v0
|
|
; CHECK-NEXT: vno %v2, %v2, %v2
|
|
; CHECK-NEXT: vceqg %v0, %v0, %v1
|
|
; CHECK-NEXT: vx %v0, %v0, %v2
|
|
; CHECK-NEXT: vnc %v0, %v2, %v0
|
|
; CHECK-NEXT: vlgvf %r0, %v0, 1
|
|
; CHECK-NEXT: tmll %r0, 1
|
|
; CHECK-NEXT: # %bb.1: # %bb15
|
|
|
|
bb:
|
|
%tmp = shufflevector <2 x i64> undef, <2 x i64> undef, <2 x i32> zeroinitializer
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb
|
|
%tmp2 = load i64, ptr undef, align 8
|
|
%tmp3 = insertelement <2 x i64> undef, i64 %tmp2, i32 1
|
|
%tmp4 = icmp ne <2 x i64> %a0, zeroinitializer
|
|
%tmp5 = xor <2 x i1> %tmp4, zeroinitializer
|
|
%tmp6 = xor <2 x i1> zeroinitializer, %tmp5
|
|
%tmp7 = and <2 x i64> %tmp3, %tmp
|
|
%tmp8 = icmp ne <2 x i64> %tmp7, zeroinitializer
|
|
%tmp9 = xor <2 x i1> zeroinitializer, %tmp8
|
|
%tmp10 = icmp ne <2 x i64> %a0, zeroinitializer
|
|
%tmp11 = xor <2 x i1> %tmp10, %tmp9
|
|
%tmp12 = and <2 x i1> %tmp6, %tmp11
|
|
%tmp13 = extractelement <2 x i1> %tmp12, i32 0
|
|
br i1 %tmp13, label %bb14, label %bb15
|
|
|
|
bb14: ; preds = %bb1
|
|
store i64 undef, ptr undef, align 8
|
|
br label %bb15
|
|
|
|
bb15: ; preds = %bb14, %bb1
|
|
unreachable
|
|
}
|