224 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=i686-- -mattr=+x87,-sse,-sse2 -global-isel | FileCheck %s --check-prefixes=CHECK-32,GISEL_X863; RUN: llc < %s -mtriple=i686-- -mattr=+x87,-sse,-sse2 | FileCheck %s --check-prefixes=CHECK-32,SDAG_X864; RUN: llc < %s -mtriple=i686-- -mattr=+x87,-sse,-sse2 -fast-isel=true | FileCheck %s --check-prefixes=CHECK-32,SDAG_X86,FAST_X865; RUN: llc < %s -mtriple=x86_64-- -mattr=+x87,-sse,-sse2 -global-isel | FileCheck %s --check-prefixes=CHECK-64,GISEL_X646; RUN: llc < %s -mtriple=x86_64-- -mattr=+x87,-sse,-sse2 | FileCheck %s --check-prefixes=CHECK-64,SDAG_X647; RUN: llc < %s -mtriple=x86_64-- -mattr=+x87,-sse,-sse2 -fast-isel=true | FileCheck %s --check-prefixes=CHECK-64,SDAG_X64,FAST_X648 9define x86_fp80 @f0(x86_fp80 noundef %a) nounwind {10; GISEL_X86-LABEL: f0:11; GISEL_X86: # %bb.0:12; GISEL_X86-NEXT: pushl %ebp13; GISEL_X86-NEXT: movl %esp, %ebp14; GISEL_X86-NEXT: andl $-16, %esp15; GISEL_X86-NEXT: subl $48, %esp16; GISEL_X86-NEXT: fldt 8(%ebp)17; GISEL_X86-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}18; GISEL_X86-NEXT: fxch %st(1)19; GISEL_X86-NEXT: fstpt {{[0-9]+}}(%esp)20; GISEL_X86-NEXT: fstpt (%esp)21; GISEL_X86-NEXT: fldt {{[0-9]+}}(%esp)22; GISEL_X86-NEXT: fldt (%esp)23; GISEL_X86-NEXT: faddp %st, %st(1)24; GISEL_X86-NEXT: movl %ebp, %esp25; GISEL_X86-NEXT: popl %ebp26; GISEL_X86-NEXT: retl27;28; SDAG_X86-LABEL: f0:29; SDAG_X86: # %bb.0:30; SDAG_X86-NEXT: pushl %ebp31; SDAG_X86-NEXT: movl %esp, %ebp32; SDAG_X86-NEXT: andl $-16, %esp33; SDAG_X86-NEXT: subl $48, %esp34; SDAG_X86-NEXT: fldt 8(%ebp)35; SDAG_X86-NEXT: fld %st(0)36; SDAG_X86-NEXT: fstpt {{[0-9]+}}(%esp)37; SDAG_X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}38; SDAG_X86-NEXT: fld %st(0)39; SDAG_X86-NEXT: fstpt (%esp)40; SDAG_X86-NEXT: faddp %st, %st(1)41; SDAG_X86-NEXT: movl %ebp, %esp42; SDAG_X86-NEXT: popl %ebp43; SDAG_X86-NEXT: retl44;45; GISEL_X64-LABEL: f0:46; GISEL_X64: # %bb.0:47; GISEL_X64-NEXT: fldt {{[0-9]+}}(%rsp)48; GISEL_X64-NEXT: fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)49; GISEL_X64-NEXT: fxch %st(1)50; GISEL_X64-NEXT: fstpt -{{[0-9]+}}(%rsp)51; GISEL_X64-NEXT: fstpt -{{[0-9]+}}(%rsp)52; GISEL_X64-NEXT: fldt -{{[0-9]+}}(%rsp)53; GISEL_X64-NEXT: fldt -{{[0-9]+}}(%rsp)54; GISEL_X64-NEXT: faddp %st, %st(1)55; GISEL_X64-NEXT: retq56;57; SDAG_X64-LABEL: f0:58; SDAG_X64: # %bb.0:59; SDAG_X64-NEXT: fldt {{[0-9]+}}(%rsp)60; SDAG_X64-NEXT: fld %st(0)61; SDAG_X64-NEXT: fstpt -{{[0-9]+}}(%rsp)62; SDAG_X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)63; SDAG_X64-NEXT: fld %st(0)64; SDAG_X64-NEXT: fstpt -{{[0-9]+}}(%rsp)65; SDAG_X64-NEXT: faddp %st, %st(1)66; SDAG_X64-NEXT: retq67 %a.addr = alloca x86_fp80, align 1668 %x = alloca x86_fp80, align 1669 store x86_fp80 %a, ptr %a.addr, align 1670 store x86_fp80 0xK400A8000000000000000, ptr %x, align 1671 %load1 = load x86_fp80, ptr %a.addr, align 1672 %load2 = load x86_fp80, ptr %x, align 1673 %add = fadd x86_fp80 %load1, %load274 ret x86_fp80 %add75}76 77 78define void @f1(ptr %a, ptr %b) nounwind {79; GISEL_X86-LABEL: f1:80; GISEL_X86: # %bb.0:81; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %eax82; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx83; GISEL_X86-NEXT: fldt (%eax)84; GISEL_X86-NEXT: fldt (%ecx)85; GISEL_X86-NEXT: fsubrp %st, %st(1)86; GISEL_X86-NEXT: fstpt (%eax)87; GISEL_X86-NEXT: retl88;89; SDAG_X86-LABEL: f1:90; SDAG_X86: # %bb.0:91; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %eax92; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx93; SDAG_X86-NEXT: fldt (%ecx)94; SDAG_X86-NEXT: fldt (%eax)95; SDAG_X86-NEXT: fsubrp %st, %st(1)96; SDAG_X86-NEXT: fstpt (%ecx)97; SDAG_X86-NEXT: retl98;99; CHECK-64-LABEL: f1:100; CHECK-64: # %bb.0:101; CHECK-64-NEXT: fldt (%rdi)102; CHECK-64-NEXT: fldt (%rsi)103; CHECK-64-NEXT: fsubrp %st, %st(1)104; CHECK-64-NEXT: fstpt (%rdi)105; CHECK-64-NEXT: retq106 %load1 = load x86_fp80, ptr %a, align 4107 %load2 = load x86_fp80, ptr %b, align 4108 %sub = fsub x86_fp80 %load1, %load2109 store x86_fp80 %sub, ptr %a, align 4110 ret void111}112 113define void @f2(ptr %a, ptr %b) nounwind {114; GISEL_X86-LABEL: f2:115; GISEL_X86: # %bb.0:116; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %eax117; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx118; GISEL_X86-NEXT: fldt (%eax)119; GISEL_X86-NEXT: fldt (%ecx)120; GISEL_X86-NEXT: fmulp %st, %st(1)121; GISEL_X86-NEXT: fstpt (%eax)122; GISEL_X86-NEXT: retl123;124; SDAG_X86-LABEL: f2:125; SDAG_X86: # %bb.0:126; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %eax127; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx128; SDAG_X86-NEXT: fldt (%ecx)129; SDAG_X86-NEXT: fldt (%eax)130; SDAG_X86-NEXT: fmulp %st, %st(1)131; SDAG_X86-NEXT: fstpt (%ecx)132; SDAG_X86-NEXT: retl133;134; CHECK-64-LABEL: f2:135; CHECK-64: # %bb.0:136; CHECK-64-NEXT: fldt (%rdi)137; CHECK-64-NEXT: fldt (%rsi)138; CHECK-64-NEXT: fmulp %st, %st(1)139; CHECK-64-NEXT: fstpt (%rdi)140; CHECK-64-NEXT: retq141 %load1 = load x86_fp80, ptr %a, align 16142 %load2 = load x86_fp80, ptr %b, align 16143 %mul = fmul x86_fp80 %load1, %load2144 store x86_fp80 %mul, ptr %a, align 16145 ret void146}147 148define void @f3(ptr %a, ptr %b) nounwind {149; GISEL_X86-LABEL: f3:150; GISEL_X86: # %bb.0:151; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %eax152; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx153; GISEL_X86-NEXT: fldt (%eax)154; GISEL_X86-NEXT: fldt (%ecx)155; GISEL_X86-NEXT: fdivrp %st, %st(1)156; GISEL_X86-NEXT: fstpt (%eax)157; GISEL_X86-NEXT: retl158;159; SDAG_X86-LABEL: f3:160; SDAG_X86: # %bb.0:161; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %eax162; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx163; SDAG_X86-NEXT: fldt (%ecx)164; SDAG_X86-NEXT: fldt (%eax)165; SDAG_X86-NEXT: fdivrp %st, %st(1)166; SDAG_X86-NEXT: fstpt (%ecx)167; SDAG_X86-NEXT: retl168;169; CHECK-64-LABEL: f3:170; CHECK-64: # %bb.0:171; CHECK-64-NEXT: fldt (%rdi)172; CHECK-64-NEXT: fldt (%rsi)173; CHECK-64-NEXT: fdivrp %st, %st(1)174; CHECK-64-NEXT: fstpt (%rdi)175; CHECK-64-NEXT: retq176 %load1 = load x86_fp80, ptr %a, align 4177 %load2 = load x86_fp80, ptr %b, align 4178 %div = fdiv x86_fp80 %load1, %load2179 store x86_fp80 %div, ptr %a, align 4180 ret void181}182 183define void @f6(ptr %a, ptr %b) nounwind {184; GISEL_X86-LABEL: f6:185; GISEL_X86: # %bb.0:186; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %eax187; GISEL_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx188; GISEL_X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}189; GISEL_X86-NEXT: fadds (%eax)190; GISEL_X86-NEXT: fstps (%ecx)191; GISEL_X86-NEXT: retl192;193; SDAG_X86-LABEL: f6:194; SDAG_X86: # %bb.0:195; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %eax196; SDAG_X86-NEXT: movl {{[0-9]+}}(%esp), %ecx197; SDAG_X86-NEXT: flds (%ecx)198; SDAG_X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}199; SDAG_X86-NEXT: fstps (%eax)200; SDAG_X86-NEXT: retl201;202; GISEL_X64-LABEL: f6:203; GISEL_X64: # %bb.0:204; GISEL_X64-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)205; GISEL_X64-NEXT: fadds (%rdi)206; GISEL_X64-NEXT: fstps (%rsi)207; GISEL_X64-NEXT: retq208;209; SDAG_X64-LABEL: f6:210; SDAG_X64: # %bb.0:211; SDAG_X64-NEXT: flds (%rdi)212; SDAG_X64-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)213; SDAG_X64-NEXT: fstps (%rsi)214; SDAG_X64-NEXT: retq215 %load1 = load float, ptr %a216 %add = fadd float %load1, 20.0217 store float %add, ptr %b218 ret void219}220;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:221; CHECK-32: {{.*}}222; FAST_X64: {{.*}}223; FAST_X86: {{.*}}224