brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 566ce53 Raw
300 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.2 | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+avx10.2 | FileCheck %s --check-prefix=X864 5define i1 @hoeq(half %x, half %y) {6; X64-LABEL: hoeq:7; X64:       # %bb.0:8; X64-NEXT:    vucomxsh %xmm1, %xmm09; X64-NEXT:    sete %al10; X64-NEXT:    retq11;12; X86-LABEL: hoeq:13; X86:       # %bb.0:14; X86-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero15; X86-NEXT:    vucomxsh {{[0-9]+}}(%esp), %xmm016; X86-NEXT:    sete %al17; X86-NEXT:    retl18    %1 = fcmp oeq half %x, %y19    ret i1 %120}21 22define i1 @hune(half %x, half %y) {23; X64-LABEL: hune:24; X64:       # %bb.0:25; X64-NEXT:    vucomxsh %xmm1, %xmm026; X64-NEXT:    setne %al27; X64-NEXT:    retq28;29; X86-LABEL: hune:30; X86:       # %bb.0:31; X86-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero32; X86-NEXT:    vucomxsh {{[0-9]+}}(%esp), %xmm033; X86-NEXT:    setne %al34; X86-NEXT:    retl35    %1 = fcmp une half %x, %y36    ret i1 %137}38 39define i1 @hoeq_mem(ptr %xp, ptr %yp) {40; X64-LABEL: hoeq_mem:41; X64:       # %bb.0:42; X64-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero43; X64-NEXT:    vucomxsh (%rsi), %xmm044; X64-NEXT:    sete %al45; X64-NEXT:    retq46;47; X86-LABEL: hoeq_mem:48; X86:       # %bb.0:49; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax50; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx51; X86-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero52; X86-NEXT:    vucomxsh (%eax), %xmm053; X86-NEXT:    sete %al54; X86-NEXT:    retl55    %x = load half, ptr %xp56    %y = load half, ptr %yp57    %1 = fcmp oeq half %x, %y58    ret i1 %159}60 61define i1 @hune_mem(ptr %xp, ptr %yp) {62; X64-LABEL: hune_mem:63; X64:       # %bb.0:64; X64-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero65; X64-NEXT:    vucomxsh (%rsi), %xmm066; X64-NEXT:    setne %al67; X64-NEXT:    retq68;69; X86-LABEL: hune_mem:70; X86:       # %bb.0:71; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax72; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx73; X86-NEXT:    vmovsh {{.*#+}} xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero74; X86-NEXT:    vucomxsh (%eax), %xmm075; X86-NEXT:    setne %al76; X86-NEXT:    retl77    %x = load half, ptr %xp78    %y = load half, ptr %yp79    %1 = fcmp une half %x, %y80    ret i1 %181}82 83define i1 @foeq(float %x, float %y) {84; X64-LABEL: foeq:85; X64:       # %bb.0:86; X64-NEXT:    vucomxss %xmm1, %xmm087; X64-NEXT:    sete %al88; X64-NEXT:    retq89;90; X86-LABEL: foeq:91; X86:       # %bb.0:92; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero93; X86-NEXT:    vucomxss {{[0-9]+}}(%esp), %xmm094; X86-NEXT:    sete %al95; X86-NEXT:    retl96    %1 = fcmp oeq float %x, %y97    ret i1 %198}99 100define i1 @fune(float %x, float %y) {101; X64-LABEL: fune:102; X64:       # %bb.0:103; X64-NEXT:    vucomxss %xmm1, %xmm0104; X64-NEXT:    setne %al105; X64-NEXT:    retq106;107; X86-LABEL: fune:108; X86:       # %bb.0:109; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero110; X86-NEXT:    vucomxss {{[0-9]+}}(%esp), %xmm0111; X86-NEXT:    setne %al112; X86-NEXT:    retl113    %1 = fcmp une float %x, %y114    ret i1 %1115}116 117define i1 @foeq_mem(ptr %xp, ptr %yp) {118; X64-LABEL: foeq_mem:119; X64:       # %bb.0:120; X64-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero121; X64-NEXT:    vucomxss (%rsi), %xmm0122; X64-NEXT:    sete %al123; X64-NEXT:    retq124;125; X86-LABEL: foeq_mem:126; X86:       # %bb.0:127; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax128; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx129; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero130; X86-NEXT:    vucomxss (%eax), %xmm0131; X86-NEXT:    sete %al132; X86-NEXT:    retl133    %x = load float, ptr %xp134    %y = load float, ptr %yp135    %1 = fcmp oeq float %x, %y136    ret i1 %1137}138 139define i1 @fune_mem(ptr %xp, ptr %yp) {140; X64-LABEL: fune_mem:141; X64:       # %bb.0:142; X64-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero143; X64-NEXT:    vucomxss (%rsi), %xmm0144; X64-NEXT:    setne %al145; X64-NEXT:    retq146;147; X86-LABEL: fune_mem:148; X86:       # %bb.0:149; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax150; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx151; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero152; X86-NEXT:    vucomxss (%eax), %xmm0153; X86-NEXT:    setne %al154; X86-NEXT:    retl155    %x = load float, ptr %xp156    %y = load float, ptr %yp157    %1 = fcmp une float %x, %y158    ret i1 %1159}160 161define i1 @doeq(double %x, double %y) {162; X64-LABEL: doeq:163; X64:       # %bb.0:164; X64-NEXT:    vucomxsd %xmm1, %xmm0165; X64-NEXT:    sete %al166; X64-NEXT:    retq167;168; X86-LABEL: doeq:169; X86:       # %bb.0:170; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero171; X86-NEXT:    vucomxsd {{[0-9]+}}(%esp), %xmm0172; X86-NEXT:    sete %al173; X86-NEXT:    retl174    %1 = fcmp oeq double %x, %y175    ret i1 %1176}177 178define i1 @dune(double %x, double %y) {179; X64-LABEL: dune:180; X64:       # %bb.0:181; X64-NEXT:    vucomxsd %xmm1, %xmm0182; X64-NEXT:    setne %al183; X64-NEXT:    retq184;185; X86-LABEL: dune:186; X86:       # %bb.0:187; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero188; X86-NEXT:    vucomxsd {{[0-9]+}}(%esp), %xmm0189; X86-NEXT:    setne %al190; X86-NEXT:    retl191    %1 = fcmp une double %x, %y192    ret i1 %1193}194 195define i1 @doeq_mem(ptr %xp, ptr %yp) {196; X64-LABEL: doeq_mem:197; X64:       # %bb.0:198; X64-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero199; X64-NEXT:    vucomxsd (%rsi), %xmm0200; X64-NEXT:    sete %al201; X64-NEXT:    retq202;203; X86-LABEL: doeq_mem:204; X86:       # %bb.0:205; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax206; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx207; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero208; X86-NEXT:    vucomxsd (%eax), %xmm0209; X86-NEXT:    sete %al210; X86-NEXT:    retl211    %x = load double, ptr %xp212    %y = load double, ptr %yp213    %1 = fcmp oeq double %x, %y214    ret i1 %1215}216 217define i1 @dune_mem(ptr %xp, ptr %yp) {218; X64-LABEL: dune_mem:219; X64:       # %bb.0:220; X64-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero221; X64-NEXT:    vucomxsd (%rsi), %xmm0222; X64-NEXT:    setne %al223; X64-NEXT:    retq224;225; X86-LABEL: dune_mem:226; X86:       # %bb.0:227; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax228; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx229; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero230; X86-NEXT:    vucomxsd (%eax), %xmm0231; X86-NEXT:    setne %al232; X86-NEXT:    retl233    %x = load double, ptr %xp234    %y = load double, ptr %yp235    %1 = fcmp une double %x, %y236    ret i1 %1237}238 239define i32 @PR118606(x86_fp80 %val1) #0 {240; X64-LABEL: PR118606:241; X64:       # %bb.0: # %entry242; X64-NEXT:    fldt {{[0-9]+}}(%rsp)243; X64-NEXT:    fldz244; X64-NEXT:    fucomi %st(1), %st245; X64-NEXT:    fstp %st(1)246; X64-NEXT:    fld1247; X64-NEXT:    fcmovne %st(1), %st248; X64-NEXT:    fcmovu %st(1), %st249; X64-NEXT:    fucompi %st(1), %st250; X64-NEXT:    fstp %st(0)251; X64-NEXT:    xorl %eax, %eax252; X64-NEXT:    retq253;254; X86-LABEL: PR118606:255; X86:       # %bb.0: # %entry256; X86-NEXT:    fldt {{[0-9]+}}(%esp)257; X86-NEXT:    fldz258; X86-NEXT:    fucomi %st(1), %st259; X86-NEXT:    fstp %st(1)260; X86-NEXT:    fld1261; X86-NEXT:    fcmovne %st(1), %st262; X86-NEXT:    fcmovu %st(1), %st263; X86-NEXT:    fucompi %st(1), %st264; X86-NEXT:    fstp %st(0)265; X86-NEXT:    xorl %eax, %eax266; X86-NEXT:    retl267entry:268  %cmp8 = fcmp oeq x86_fp80 %val1, 0xK00000000000000000000269  %0 = select i1 %cmp8, x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK00000000000000000000270  %cmp64 = fcmp ogt x86_fp80 %0, 0xK00000000000000000000271  br i1 %cmp64, label %if.then66, label %if.end70272 273if.then66:                                        ; preds = %entry274  ret i32 0275 276if.end70:                                         ; preds = %entry277  ret i32 0278}279 280define i1 @constrained_fcmp() {281; X64-LABEL: constrained_fcmp:282; X64:       # %bb.0: # %entry283; X64-NEXT:    vxorpd %xmm0, %xmm0, %xmm0284; X64-NEXT:    vucomxsd %xmm0, %xmm0285; X64-NEXT:    setne %al286; X64-NEXT:    retq287;288; X86-LABEL: constrained_fcmp:289; X86:       # %bb.0: # %entry290; X86-NEXT:    vxorpd %xmm0, %xmm0, %xmm0291; X86-NEXT:    vucomxsd %xmm0, %xmm0292; X86-NEXT:    setne %al293; X86-NEXT:    retl294entry:295  %0 = tail call i1 @llvm.experimental.constrained.fcmps.f64(double 0.000000e+00, double 0.000000e+00, metadata !"une", metadata !"fpexcept.strict")296  ret i1 %0297}298 299declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)300