209 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86,FASTISEL-X863; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=X86,SDAG-X864; DISABLED: llc < %s -mtriple=i686-linux-gnu -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X865; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel -mattr=+sse | FileCheck %s --check-prefixes=X86,SSE-X86,FASTISEL-SSE-X866; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0 -mattr=+sse | FileCheck %s --check-prefixes=X86,SSE-X86,SDAG-SSE-X867; DISABLED: llc < %s -mtriple=i686-linux-gnu -global-isel=1 -global-isel-abort=2 -mattr=+sse | FileCheck %s --check-prefixes=X86,SSE-X86,GISEL-SSE-X868; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel -mattr=+sse | FileCheck %s --check-prefixes=X64,SSE-X64,FASTISEL-SSE-X649; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=0 -fast-isel=0 -mattr=+sse | FileCheck %s --check-prefixes=X64,SSE-X64,SDAG-SSE-X6410; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel=1 -global-isel-abort=2 -mattr=+sse | FileCheck %s --check-prefixes=X64,SSE-X64,GISEL-SSE-X6411 12define double @fneg_f64(double %x) nounwind {13; X86-LABEL: fneg_f64:14; X86: # %bb.0:15; X86-NEXT: fldl {{[0-9]+}}(%esp)16; X86-NEXT: fchs17; X86-NEXT: retl18;19; FASTISEL-SSE-X64-LABEL: fneg_f64:20; FASTISEL-SSE-X64: # %bb.0:21; FASTISEL-SSE-X64-NEXT: movq %xmm0, %rax22; FASTISEL-SSE-X64-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x800000000000000023; FASTISEL-SSE-X64-NEXT: xorq %rax, %rcx24; FASTISEL-SSE-X64-NEXT: movq %rcx, %xmm025; FASTISEL-SSE-X64-NEXT: retq26;27; SDAG-SSE-X64-LABEL: fneg_f64:28; SDAG-SSE-X64: # %bb.0:29; SDAG-SSE-X64-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm030; SDAG-SSE-X64-NEXT: retq31;32; GISEL-SSE-X64-LABEL: fneg_f64:33; GISEL-SSE-X64: # %bb.0:34; GISEL-SSE-X64-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x800000000000000035; GISEL-SSE-X64-NEXT: movq %xmm0, %rcx36; GISEL-SSE-X64-NEXT: xorq %rax, %rcx37; GISEL-SSE-X64-NEXT: movq %rcx, %xmm038; GISEL-SSE-X64-NEXT: retq39 %y = fneg double %x40 ret double %y41}42 43define float @fneg_f32(float %x) nounwind {44; FASTISEL-X86-LABEL: fneg_f32:45; FASTISEL-X86: # %bb.0:46; FASTISEL-X86-NEXT: flds {{[0-9]+}}(%esp)47; FASTISEL-X86-NEXT: fchs48; FASTISEL-X86-NEXT: retl49;50; SDAG-X86-LABEL: fneg_f32:51; SDAG-X86: # %bb.0:52; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)53; SDAG-X86-NEXT: fchs54; SDAG-X86-NEXT: retl55;56; SSE-X86-LABEL: fneg_f32:57; SSE-X86: # %bb.0:58; SSE-X86-NEXT: pushl %eax59; SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero60; SSE-X86-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm061; SSE-X86-NEXT: movss %xmm0, (%esp)62; SSE-X86-NEXT: flds (%esp)63; SSE-X86-NEXT: popl %eax64; SSE-X86-NEXT: retl65;66; FASTISEL-SSE-X64-LABEL: fneg_f32:67; FASTISEL-SSE-X64: # %bb.0:68; FASTISEL-SSE-X64-NEXT: movd %xmm0, %eax69; FASTISEL-SSE-X64-NEXT: xorl $2147483648, %eax # imm = 0x8000000070; FASTISEL-SSE-X64-NEXT: movd %eax, %xmm071; FASTISEL-SSE-X64-NEXT: retq72;73; SDAG-SSE-X64-LABEL: fneg_f32:74; SDAG-SSE-X64: # %bb.0:75; SDAG-SSE-X64-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm076; SDAG-SSE-X64-NEXT: retq77;78; GISEL-SSE-X64-LABEL: fneg_f32:79; GISEL-SSE-X64: # %bb.0:80; GISEL-SSE-X64-NEXT: movd %xmm0, %eax81; GISEL-SSE-X64-NEXT: addl $-2147483648, %eax # imm = 0x8000000082; GISEL-SSE-X64-NEXT: movd %eax, %xmm083; GISEL-SSE-X64-NEXT: retq84 %y = fneg float %x85 ret float %y86}87 88define void @fneg_f64_mem(ptr %x, ptr %y) nounwind {89; X86-LABEL: fneg_f64_mem:90; X86: # %bb.0:91; X86-NEXT: movl {{[0-9]+}}(%esp), %eax92; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx93; X86-NEXT: fldl (%ecx)94; X86-NEXT: fchs95; X86-NEXT: fstpl (%eax)96; X86-NEXT: retl97;98; FASTISEL-SSE-X64-LABEL: fneg_f64_mem:99; FASTISEL-SSE-X64: # %bb.0:100; FASTISEL-SSE-X64-NEXT: movq {{.*#+}} xmm0 = mem[0],zero101; FASTISEL-SSE-X64-NEXT: movq %xmm0, %rax102; FASTISEL-SSE-X64-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000103; FASTISEL-SSE-X64-NEXT: xorq %rax, %rcx104; FASTISEL-SSE-X64-NEXT: movq %rcx, %xmm0105; FASTISEL-SSE-X64-NEXT: movq %xmm0, (%rsi)106; FASTISEL-SSE-X64-NEXT: retq107;108; SDAG-SSE-X64-LABEL: fneg_f64_mem:109; SDAG-SSE-X64: # %bb.0:110; SDAG-SSE-X64-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000111; SDAG-SSE-X64-NEXT: xorq (%rdi), %rax112; SDAG-SSE-X64-NEXT: movq %rax, (%rsi)113; SDAG-SSE-X64-NEXT: retq114;115; GISEL-SSE-X64-LABEL: fneg_f64_mem:116; GISEL-SSE-X64: # %bb.0:117; GISEL-SSE-X64-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000118; GISEL-SSE-X64-NEXT: xorq (%rdi), %rax119; GISEL-SSE-X64-NEXT: movq %rax, (%rsi)120; GISEL-SSE-X64-NEXT: retq121 %a = load double, ptr %x122 %b = fneg double %a123 store double %b, ptr %y124 ret void125}126 127define void @fneg_f32_mem(ptr %x, ptr %y) nounwind {128; FASTISEL-X86-LABEL: fneg_f32_mem:129; FASTISEL-X86: # %bb.0:130; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax131; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx132; FASTISEL-X86-NEXT: movl $-2147483648, %edx # imm = 0x80000000133; FASTISEL-X86-NEXT: xorl (%ecx), %edx134; FASTISEL-X86-NEXT: movl %edx, (%eax)135; FASTISEL-X86-NEXT: retl136;137; SDAG-X86-LABEL: fneg_f32_mem:138; SDAG-X86: # %bb.0:139; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax140; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx141; SDAG-X86-NEXT: movl $-2147483648, %edx # imm = 0x80000000142; SDAG-X86-NEXT: xorl (%ecx), %edx143; SDAG-X86-NEXT: movl %edx, (%eax)144; SDAG-X86-NEXT: retl145;146; FASTISEL-SSE-X86-LABEL: fneg_f32_mem:147; FASTISEL-SSE-X86: # %bb.0:148; FASTISEL-SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax149; FASTISEL-SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx150; FASTISEL-SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero151; FASTISEL-SSE-X86-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0152; FASTISEL-SSE-X86-NEXT: movss %xmm0, (%eax)153; FASTISEL-SSE-X86-NEXT: retl154;155; SDAG-SSE-X86-LABEL: fneg_f32_mem:156; SDAG-SSE-X86: # %bb.0:157; SDAG-SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax158; SDAG-SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx159; SDAG-SSE-X86-NEXT: movl $-2147483648, %edx # imm = 0x80000000160; SDAG-SSE-X86-NEXT: xorl (%ecx), %edx161; SDAG-SSE-X86-NEXT: movl %edx, (%eax)162; SDAG-SSE-X86-NEXT: retl163;164; FASTISEL-SSE-X64-LABEL: fneg_f32_mem:165; FASTISEL-SSE-X64: # %bb.0:166; FASTISEL-SSE-X64-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero167; FASTISEL-SSE-X64-NEXT: movd %xmm0, %eax168; FASTISEL-SSE-X64-NEXT: xorl $2147483648, %eax # imm = 0x80000000169; FASTISEL-SSE-X64-NEXT: movd %eax, %xmm0170; FASTISEL-SSE-X64-NEXT: movd %xmm0, (%rsi)171; FASTISEL-SSE-X64-NEXT: retq172;173; SDAG-SSE-X64-LABEL: fneg_f32_mem:174; SDAG-SSE-X64: # %bb.0:175; SDAG-SSE-X64-NEXT: movl $-2147483648, %eax # imm = 0x80000000176; SDAG-SSE-X64-NEXT: xorl (%rdi), %eax177; SDAG-SSE-X64-NEXT: movl %eax, (%rsi)178; SDAG-SSE-X64-NEXT: retq179;180; GISEL-SSE-X64-LABEL: fneg_f32_mem:181; GISEL-SSE-X64: # %bb.0:182; GISEL-SSE-X64-NEXT: movl $-2147483648, %eax # imm = 0x80000000183; GISEL-SSE-X64-NEXT: xorl (%rdi), %eax184; GISEL-SSE-X64-NEXT: movl %eax, (%rsi)185; GISEL-SSE-X64-NEXT: retq186 %a = load float, ptr %x187 %b = fneg float %a188 store float %b, ptr %y189 ret void190}191 192define x86_fp80 @test_fp80(x86_fp80 %a) nounwind {193; X86-LABEL: test_fp80:194; X86: # %bb.0:195; X86-NEXT: fldt {{[0-9]+}}(%esp)196; X86-NEXT: fchs197; X86-NEXT: retl198;199; X64-LABEL: test_fp80:200; X64: # %bb.0:201; X64-NEXT: fldt {{[0-9]+}}(%rsp)202; X64-NEXT: fchs203; X64-NEXT: retq204 %1 = fneg x86_fp80 %a205 ret x86_fp80 %1206}207;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:208; SSE-X64: {{.*}}209