156 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s -check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s -check-prefix=X644 5; DAGCombiner crashes during sext folding6 7define <2 x i256> @test_sext1() {8; X86-LABEL: test_sext1:9; X86: # %bb.0:10; X86-NEXT: movl {{[0-9]+}}(%esp), %eax11; X86-NEXT: movl $-1, 60(%eax)12; X86-NEXT: movl $-1, 56(%eax)13; X86-NEXT: movl $-1, 52(%eax)14; X86-NEXT: movl $-1, 48(%eax)15; X86-NEXT: movl $-1, 44(%eax)16; X86-NEXT: movl $-1, 40(%eax)17; X86-NEXT: movl $-1, 36(%eax)18; X86-NEXT: movl $-99, 32(%eax)19; X86-NEXT: movl $0, 28(%eax)20; X86-NEXT: movl $0, 24(%eax)21; X86-NEXT: movl $0, 20(%eax)22; X86-NEXT: movl $0, 16(%eax)23; X86-NEXT: movl $0, 12(%eax)24; X86-NEXT: movl $0, 8(%eax)25; X86-NEXT: movl $0, 4(%eax)26; X86-NEXT: movl $0, (%eax)27; X86-NEXT: retl $428;29; X64-LABEL: test_sext1:30; X64: # %bb.0:31; X64-NEXT: movq %rdi, %rax32; X64-NEXT: xorps %xmm0, %xmm033; X64-NEXT: movaps %xmm0, 16(%rdi)34; X64-NEXT: movaps %xmm0, (%rdi)35; X64-NEXT: movq $-1, 56(%rdi)36; X64-NEXT: movq $-1, 48(%rdi)37; X64-NEXT: movq $-1, 40(%rdi)38; X64-NEXT: movq $-99, 32(%rdi)39; X64-NEXT: retq40 %Se = sext <2 x i8> <i8 -100, i8 -99> to <2 x i256>41 %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>42 ret <2 x i256> %Shuff43}44 45define <2 x i256> @test_sext2() {46; X86-LABEL: test_sext2:47; X86: # %bb.0:48; X86-NEXT: movl {{[0-9]+}}(%esp), %eax49; X86-NEXT: movl $-1, 60(%eax)50; X86-NEXT: movl $-1, 56(%eax)51; X86-NEXT: movl $-1, 52(%eax)52; X86-NEXT: movl $-1, 48(%eax)53; X86-NEXT: movl $-1, 44(%eax)54; X86-NEXT: movl $-1, 40(%eax)55; X86-NEXT: movl $-1, 36(%eax)56; X86-NEXT: movl $-1999, 32(%eax) # imm = 0xF83157; X86-NEXT: movl $0, 28(%eax)58; X86-NEXT: movl $0, 24(%eax)59; X86-NEXT: movl $0, 20(%eax)60; X86-NEXT: movl $0, 16(%eax)61; X86-NEXT: movl $0, 12(%eax)62; X86-NEXT: movl $0, 8(%eax)63; X86-NEXT: movl $0, 4(%eax)64; X86-NEXT: movl $0, (%eax)65; X86-NEXT: retl $466;67; X64-LABEL: test_sext2:68; X64: # %bb.0:69; X64-NEXT: movq %rdi, %rax70; X64-NEXT: xorps %xmm0, %xmm071; X64-NEXT: movaps %xmm0, 16(%rdi)72; X64-NEXT: movaps %xmm0, (%rdi)73; X64-NEXT: movq $-1, 56(%rdi)74; X64-NEXT: movq $-1, 48(%rdi)75; X64-NEXT: movq $-1, 40(%rdi)76; X64-NEXT: movq $-1999, 32(%rdi) # imm = 0xF83177; X64-NEXT: retq78 %Se = sext <2 x i128> <i128 -2000, i128 -1999> to <2 x i256>79 %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>80 ret <2 x i256> %Shuff81}82 83define <2 x i256> @test_zext1() {84; X86-LABEL: test_zext1:85; X86: # %bb.0:86; X86-NEXT: movl {{[0-9]+}}(%esp), %eax87; X86-NEXT: movl $0, 60(%eax)88; X86-NEXT: movl $0, 56(%eax)89; X86-NEXT: movl $0, 52(%eax)90; X86-NEXT: movl $0, 48(%eax)91; X86-NEXT: movl $0, 44(%eax)92; X86-NEXT: movl $0, 40(%eax)93; X86-NEXT: movl $0, 36(%eax)94; X86-NEXT: movl $254, 32(%eax)95; X86-NEXT: movl $0, 28(%eax)96; X86-NEXT: movl $0, 24(%eax)97; X86-NEXT: movl $0, 20(%eax)98; X86-NEXT: movl $0, 16(%eax)99; X86-NEXT: movl $0, 12(%eax)100; X86-NEXT: movl $0, 8(%eax)101; X86-NEXT: movl $0, 4(%eax)102; X86-NEXT: movl $0, (%eax)103; X86-NEXT: retl $4104;105; X64-LABEL: test_zext1:106; X64: # %bb.0:107; X64-NEXT: movq %rdi, %rax108; X64-NEXT: xorps %xmm0, %xmm0109; X64-NEXT: movaps %xmm0, 48(%rdi)110; X64-NEXT: movaps %xmm0, 16(%rdi)111; X64-NEXT: movaps %xmm0, (%rdi)112; X64-NEXT: movq $0, 40(%rdi)113; X64-NEXT: movq $254, 32(%rdi)114; X64-NEXT: retq115 %Se = zext <2 x i8> <i8 -1, i8 -2> to <2 x i256>116 %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>117 ret <2 x i256> %Shuff118}119 120define <2 x i256> @test_zext2() {121; X86-LABEL: test_zext2:122; X86: # %bb.0:123; X86-NEXT: movl {{[0-9]+}}(%esp), %eax124; X86-NEXT: movl $0, 60(%eax)125; X86-NEXT: movl $0, 56(%eax)126; X86-NEXT: movl $0, 52(%eax)127; X86-NEXT: movl $0, 48(%eax)128; X86-NEXT: movl $-1, 44(%eax)129; X86-NEXT: movl $-1, 40(%eax)130; X86-NEXT: movl $-1, 36(%eax)131; X86-NEXT: movl $-2, 32(%eax)132; X86-NEXT: movl $0, 28(%eax)133; X86-NEXT: movl $0, 24(%eax)134; X86-NEXT: movl $0, 20(%eax)135; X86-NEXT: movl $0, 16(%eax)136; X86-NEXT: movl $0, 12(%eax)137; X86-NEXT: movl $0, 8(%eax)138; X86-NEXT: movl $0, 4(%eax)139; X86-NEXT: movl $0, (%eax)140; X86-NEXT: retl $4141;142; X64-LABEL: test_zext2:143; X64: # %bb.0:144; X64-NEXT: movq %rdi, %rax145; X64-NEXT: xorps %xmm0, %xmm0146; X64-NEXT: movaps %xmm0, 48(%rdi)147; X64-NEXT: movaps %xmm0, 16(%rdi)148; X64-NEXT: movaps %xmm0, (%rdi)149; X64-NEXT: movq $-1, 40(%rdi)150; X64-NEXT: movq $-2, 32(%rdi)151; X64-NEXT: retq152 %Se = zext <2 x i128> <i128 -1, i128 -2> to <2 x i256>153 %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>154 ret <2 x i256> %Shuff155}156