; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s ; Make sure that we do not infinitely-loop combining shuffle vectors. @test24_id5239 = dso_local local_unnamed_addr global i64 0, align 8 define void @infiloop() { ; CHECK-LABEL: infiloop: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: pushq %rbp ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: .cfi_offset %rbp, -16 ; CHECK-NEXT: movq %rsp, %rbp ; CHECK-NEXT: .cfi_def_cfa_register %rbp ; CHECK-NEXT: andq $-32, %rsp ; CHECK-NEXT: subq $64, %rsp ; CHECK-NEXT: movabsq $506097522914230528, %rax # imm = 0x706050403020100 ; CHECK-NEXT: movq %rax, test24_id5239(%rip) ; CHECK-NEXT: vmovaps {{.*#+}} ymm0 = [4,1,6,7,6,7,2,3,6,7,4,5,6,7,2,3,6,7,2,3,2,3,2,3,4,5,4,5,2,3,0,1] ; CHECK-NEXT: vmovaps %ymm0, (%rsp) ; CHECK-NEXT: movq %rbp, %rsp ; CHECK-NEXT: popq %rbp ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ; CHECK-NEXT: vzeroupper ; CHECK-NEXT: retq entry: %id5230 = alloca <32 x i8>, align 32 store i8 0, ptr @test24_id5239, align 8 store i8 1, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 1), align 1 store i8 2, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 2), align 2 store i8 3, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 3), align 1 store i8 4, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 4), align 4 store i8 5, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 5), align 1 store i8 6, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 6), align 2 store i8 7, ptr getelementptr inbounds (i8, ptr @test24_id5239, i64 7), align 1 %0 = load <4 x i16>, ptr @test24_id5239, align 8 %shuffle = shufflevector <4 x i16> %0, <4 x i16> poison, <16 x i32> %1 = bitcast <16 x i16> %shuffle to <32 x i8> %2 = or <32 x i8> %1, store volatile <32 x i8> %2, ptr %id5230, align 32 ret void }