98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=znver1 | FileCheck %s3 4define win64cc void @opaque() {5; CHECK-LABEL: opaque:6; CHECK: # %bb.0:7; CHECK-NEXT: retq8 ret void9}10 11; We need xmm6 to be live from the loop header across all iterations of the loop.12; We shouldn't clobber ymm6 inside the loop.13define i32 @main() {14; CHECK-LABEL: main:15; CHECK: # %bb.0: # %start16; CHECK-NEXT: subq $584, %rsp # imm = 0x24817; CHECK-NEXT: .cfi_def_cfa_offset 59218; CHECK-NEXT: vmovaps {{.*#+}} xmm6 = [1010101010101010101,2020202020202020202]19; CHECK-NEXT: xorl %esi, %esi20; CHECK-NEXT: .p2align 421; CHECK-NEXT: .LBB1_1: # %fake-loop22; CHECK-NEXT: # =>This Inner Loop Header: Depth=123; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm024; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm125; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm726; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm227; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm328; CHECK-NEXT: vmovups %ymm0, {{[0-9]+}}(%rsp)29; CHECK-NEXT: vmovups %ymm1, {{[0-9]+}}(%rsp)30; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm131; CHECK-NEXT: vmovups %ymm3, {{[0-9]+}}(%rsp)32; CHECK-NEXT: vmovups %ymm2, {{[0-9]+}}(%rsp)33; CHECK-NEXT: vmovups %ymm7, {{[0-9]+}}(%rsp)34; CHECK-NEXT: vmovups %ymm3, {{[0-9]+}}(%rsp)35; CHECK-NEXT: vmovups %ymm2, {{[0-9]+}}(%rsp)36; CHECK-NEXT: vmovups %ymm7, {{[0-9]+}}(%rsp)37; CHECK-NEXT: vmovups %ymm1, {{[0-9]+}}(%rsp)38; CHECK-NEXT: vmovups %ymm1, {{[0-9]+}}(%rsp)39; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm540; CHECK-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm441; CHECK-NEXT: vmovups %ymm5, {{[0-9]+}}(%rsp)42; CHECK-NEXT: vmovups %ymm4, {{[0-9]+}}(%rsp)43; CHECK-NEXT: vzeroupper44; CHECK-NEXT: callq opaque@PLT45; CHECK-NEXT: vmovaps %xmm6, {{[0-9]+}}(%rsp)46; CHECK-NEXT: testb %sil, %sil47; CHECK-NEXT: jne .LBB1_148; CHECK-NEXT: # %bb.2: # %exit49; CHECK-NEXT: movabsq $1010101010101010101, %rcx # imm = 0xE04998456557EB550; CHECK-NEXT: xorl %eax, %eax51; CHECK-NEXT: cmpq %rcx, {{[0-9]+}}(%rsp)52; CHECK-NEXT: setne %al53; CHECK-NEXT: negl %eax54; CHECK-NEXT: addq $584, %rsp # imm = 0x24855; CHECK-NEXT: .cfi_def_cfa_offset 856; CHECK-NEXT: retq57start:58 %dummy0 = alloca [22 x i64], align 859 %dummy1 = alloca [22 x i64], align 860 %dummy2 = alloca [22 x i64], align 861 62 %data = alloca <2 x i64>, align 1663 64 br label %fake-loop65 66fake-loop: ; preds = %fake-loop, %start67 %dummy0.cast = bitcast ptr %dummy0 to ptr68 %dummy1.cast = bitcast ptr %dummy1 to ptr69 call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %dummy1.cast, ptr nonnull align 8 %dummy0.cast, i64 176, i1 false)70 71 %dummy1.cast.copy = bitcast ptr %dummy1 to ptr72 %dummy2.cast = bitcast ptr %dummy2 to ptr73 call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %dummy2.cast)74 call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %dummy2.cast, ptr nonnull align 8 %dummy1.cast.copy, i64 176, i1 false)75 76 call win64cc void @opaque()77 78 store <2 x i64> <i64 1010101010101010101, i64 2020202020202020202>, ptr %data, align 879 80 %opaque-false = icmp eq i8 0, 181 br i1 %opaque-false, label %fake-loop, label %exit82 83exit: ; preds = %fake-loop84 %data.cast = bitcast ptr %data to ptr85 %0 = load i64, ptr %data.cast, align 886 %1 = icmp eq i64 %0, 101010101010101010187 %2 = select i1 %1, i32 0, i32 -188 ret i32 %289}90 91; Function Attrs: argmemonly nounwind92declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #093 94; Function Attrs: argmemonly nounwind95declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #096 97attributes #0 = { argmemonly nounwind }98