brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.5 KiB · fae3db6 Raw
392 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-- -verify-machineinstrs | FileCheck %s --check-prefixes X64,SDAG-X643; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-- -verify-machineinstrs | FileCheck %s --check-prefixes X64,GISEL-X644; RUN: llc < %s                                   -mattr=+avx512f -mtriple=x86_64-- -verify-machineinstrs | FileCheck %s --check-prefixes AVX512,SDAG-AVX5125; RUN: llc < %s -global-isel -global-isel-abort=1 -mattr=+avx512f -mtriple=x86_64-- -verify-machineinstrs | FileCheck %s --check-prefixes AVX512,GISEL-AVX5126 7define i64 @test_double_to_ui64(double %x) {8; SDAG-X64-LABEL: test_double_to_ui64:9; SDAG-X64:       # %bb.0: # %entry10; SDAG-X64-NEXT:    cvttsd2si %xmm0, %rcx11; SDAG-X64-NEXT:    movq %rcx, %rdx12; SDAG-X64-NEXT:    sarq $63, %rdx13; SDAG-X64-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm014; SDAG-X64-NEXT:    cvttsd2si %xmm0, %rax15; SDAG-X64-NEXT:    andq %rdx, %rax16; SDAG-X64-NEXT:    orq %rcx, %rax17; SDAG-X64-NEXT:    retq18;19; GISEL-X64-LABEL: test_double_to_ui64:20; GISEL-X64:       # %bb.0: # %entry21; GISEL-X64-NEXT:    cvttsd2si %xmm0, %rcx22; GISEL-X64-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]23; GISEL-X64-NEXT:    movapd %xmm0, %xmm224; GISEL-X64-NEXT:    subsd %xmm1, %xmm225; GISEL-X64-NEXT:    cvttsd2si %xmm2, %rdx26; GISEL-X64-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x800000000000000027; GISEL-X64-NEXT:    xorq %rdx, %rax28; GISEL-X64-NEXT:    xorl %edx, %edx29; GISEL-X64-NEXT:    ucomisd %xmm1, %xmm030; GISEL-X64-NEXT:    setb %dl31; GISEL-X64-NEXT:    andl $1, %edx32; GISEL-X64-NEXT:    cmovneq %rcx, %rax33; GISEL-X64-NEXT:    retq34;35; AVX512-LABEL: test_double_to_ui64:36; AVX512:       # %bb.0: # %entry37; AVX512-NEXT:    vcvttsd2usi %xmm0, %rax38; AVX512-NEXT:    retq39entry:40  %conv = fptoui double %x to i6441  ret i64 %conv42}43 44define i32 @test_double_to_ui32(double %x) {45; X64-LABEL: test_double_to_ui32:46; X64:       # %bb.0: # %entry47; X64-NEXT:    cvttsd2si %xmm0, %rax48; X64-NEXT:    # kill: def $eax killed $eax killed $rax49; X64-NEXT:    retq50;51; AVX512-LABEL: test_double_to_ui32:52; AVX512:       # %bb.0: # %entry53; AVX512-NEXT:    vcvttsd2usi %xmm0, %eax54; AVX512-NEXT:    retq55entry:56  %conv = fptoui double %x to i3257  ret i32 %conv58}59 60define zeroext i16 @test_double_to_ui16(double %x) {61; X64-LABEL: test_double_to_ui16:62; X64:       # %bb.0: # %entry63; X64-NEXT:    cvttsd2si %xmm0, %eax64; X64-NEXT:    # kill: def $ax killed $ax killed $eax65; X64-NEXT:    retq66;67; SDAG-AVX512-LABEL: test_double_to_ui16:68; SDAG-AVX512:       # %bb.0: # %entry69; SDAG-AVX512-NEXT:    vcvttsd2si %xmm0, %eax70; SDAG-AVX512-NEXT:    # kill: def $ax killed $ax killed $eax71; SDAG-AVX512-NEXT:    retq72;73; GISEL-AVX512-LABEL: test_double_to_ui16:74; GISEL-AVX512:       # %bb.0: # %entry75; GISEL-AVX512-NEXT:    vcvttsd2usi %xmm0, %eax76; GISEL-AVX512-NEXT:    # kill: def $ax killed $ax killed $eax77; GISEL-AVX512-NEXT:    retq78entry:79  %conv = fptoui double %x to i1680  ret i16 %conv81}82 83define zeroext i8 @test_double_to_ui8(double %x) {84; X64-LABEL: test_double_to_ui8:85; X64:       # %bb.0: # %entry86; X64-NEXT:    cvttsd2si %xmm0, %eax87; X64-NEXT:    # kill: def $al killed $al killed $eax88; X64-NEXT:    retq89;90; SDAG-AVX512-LABEL: test_double_to_ui8:91; SDAG-AVX512:       # %bb.0: # %entry92; SDAG-AVX512-NEXT:    vcvttsd2si %xmm0, %eax93; SDAG-AVX512-NEXT:    # kill: def $al killed $al killed $eax94; SDAG-AVX512-NEXT:    retq95;96; GISEL-AVX512-LABEL: test_double_to_ui8:97; GISEL-AVX512:       # %bb.0: # %entry98; GISEL-AVX512-NEXT:    vcvttsd2usi %xmm0, %eax99; GISEL-AVX512-NEXT:    # kill: def $al killed $al killed $eax100; GISEL-AVX512-NEXT:    retq101entry:102  %conv = fptoui double %x to i8103  ret i8 %conv104}105 106define i64 @test_float_to_ui64(float %x) {107; SDAG-X64-LABEL: test_float_to_ui64:108; SDAG-X64:       # %bb.0: # %entry109; SDAG-X64-NEXT:    cvttss2si %xmm0, %rcx110; SDAG-X64-NEXT:    movq %rcx, %rdx111; SDAG-X64-NEXT:    sarq $63, %rdx112; SDAG-X64-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0113; SDAG-X64-NEXT:    cvttss2si %xmm0, %rax114; SDAG-X64-NEXT:    andq %rdx, %rax115; SDAG-X64-NEXT:    orq %rcx, %rax116; SDAG-X64-NEXT:    retq117;118; GISEL-X64-LABEL: test_float_to_ui64:119; GISEL-X64:       # %bb.0: # %entry120; GISEL-X64-NEXT:    cvttss2si %xmm0, %rcx121; GISEL-X64-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]122; GISEL-X64-NEXT:    movaps %xmm0, %xmm2123; GISEL-X64-NEXT:    subss %xmm1, %xmm2124; GISEL-X64-NEXT:    cvttss2si %xmm2, %rdx125; GISEL-X64-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000126; GISEL-X64-NEXT:    xorq %rdx, %rax127; GISEL-X64-NEXT:    xorl %edx, %edx128; GISEL-X64-NEXT:    ucomiss %xmm1, %xmm0129; GISEL-X64-NEXT:    setb %dl130; GISEL-X64-NEXT:    andl $1, %edx131; GISEL-X64-NEXT:    cmovneq %rcx, %rax132; GISEL-X64-NEXT:    retq133;134; AVX512-LABEL: test_float_to_ui64:135; AVX512:       # %bb.0: # %entry136; AVX512-NEXT:    vcvttss2usi %xmm0, %rax137; AVX512-NEXT:    retq138entry:139  %conv = fptoui float %x to i64140  ret i64 %conv141}142 143define i32 @test_float_to_ui32(float %x) {144; X64-LABEL: test_float_to_ui32:145; X64:       # %bb.0: # %entry146; X64-NEXT:    cvttss2si %xmm0, %rax147; X64-NEXT:    # kill: def $eax killed $eax killed $rax148; X64-NEXT:    retq149;150; AVX512-LABEL: test_float_to_ui32:151; AVX512:       # %bb.0: # %entry152; AVX512-NEXT:    vcvttss2usi %xmm0, %eax153; AVX512-NEXT:    retq154entry:155  %conv = fptoui float %x to i32156  ret i32 %conv157}158 159define zeroext i16 @test_float_to_ui16(float %x) {160; X64-LABEL: test_float_to_ui16:161; X64:       # %bb.0: # %entry162; X64-NEXT:    cvttss2si %xmm0, %eax163; X64-NEXT:    # kill: def $ax killed $ax killed $eax164; X64-NEXT:    retq165;166; SDAG-AVX512-LABEL: test_float_to_ui16:167; SDAG-AVX512:       # %bb.0: # %entry168; SDAG-AVX512-NEXT:    vcvttss2si %xmm0, %eax169; SDAG-AVX512-NEXT:    # kill: def $ax killed $ax killed $eax170; SDAG-AVX512-NEXT:    retq171;172; GISEL-AVX512-LABEL: test_float_to_ui16:173; GISEL-AVX512:       # %bb.0: # %entry174; GISEL-AVX512-NEXT:    vcvttss2usi %xmm0, %eax175; GISEL-AVX512-NEXT:    # kill: def $ax killed $ax killed $eax176; GISEL-AVX512-NEXT:    retq177entry:178  %conv = fptoui float %x to i16179  ret i16 %conv180}181 182define zeroext i8 @test_float_to_ui8(float %x) {183; X64-LABEL: test_float_to_ui8:184; X64:       # %bb.0: # %entry185; X64-NEXT:    cvttss2si %xmm0, %eax186; X64-NEXT:    # kill: def $al killed $al killed $eax187; X64-NEXT:    retq188;189; SDAG-AVX512-LABEL: test_float_to_ui8:190; SDAG-AVX512:       # %bb.0: # %entry191; SDAG-AVX512-NEXT:    vcvttss2si %xmm0, %eax192; SDAG-AVX512-NEXT:    # kill: def $al killed $al killed $eax193; SDAG-AVX512-NEXT:    retq194;195; GISEL-AVX512-LABEL: test_float_to_ui8:196; GISEL-AVX512:       # %bb.0: # %entry197; GISEL-AVX512-NEXT:    vcvttss2usi %xmm0, %eax198; GISEL-AVX512-NEXT:    # kill: def $al killed $al killed $eax199; GISEL-AVX512-NEXT:    retq200entry:201  %conv = fptoui float %x to i8202  ret i8 %conv203}204 205define i64 @test_double_to_si64(double %x) {206; X64-LABEL: test_double_to_si64:207; X64:       # %bb.0: # %entry208; X64-NEXT:    cvttsd2si %xmm0, %rax209; X64-NEXT:    retq210;211; AVX512-LABEL: test_double_to_si64:212; AVX512:       # %bb.0: # %entry213; AVX512-NEXT:    vcvttsd2si %xmm0, %rax214; AVX512-NEXT:    retq215entry:216  %conv = fptosi double %x to i64217  ret i64 %conv218}219 220define i32 @test_double_to_si32(double %x) {221; X64-LABEL: test_double_to_si32:222; X64:       # %bb.0: # %entry223; X64-NEXT:    cvttsd2si %xmm0, %eax224; X64-NEXT:    retq225;226; AVX512-LABEL: test_double_to_si32:227; AVX512:       # %bb.0: # %entry228; AVX512-NEXT:    vcvttsd2si %xmm0, %eax229; AVX512-NEXT:    retq230entry:231  %conv = fptosi double %x to i32232  ret i32 %conv233}234 235define signext i16 @test_double_to_si16(double %x) {236; X64-LABEL: test_double_to_si16:237; X64:       # %bb.0: # %entry238; X64-NEXT:    cvttsd2si %xmm0, %eax239; X64-NEXT:    # kill: def $ax killed $ax killed $eax240; X64-NEXT:    retq241;242; AVX512-LABEL: test_double_to_si16:243; AVX512:       # %bb.0: # %entry244; AVX512-NEXT:    vcvttsd2si %xmm0, %eax245; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax246; AVX512-NEXT:    retq247entry:248  %conv = fptosi double %x to i16249  ret i16 %conv250}251 252define signext i8 @test_double_to_si8(double %x) {253; X64-LABEL: test_double_to_si8:254; X64:       # %bb.0: # %entry255; X64-NEXT:    cvttsd2si %xmm0, %eax256; X64-NEXT:    # kill: def $al killed $al killed $eax257; X64-NEXT:    retq258;259; AVX512-LABEL: test_double_to_si8:260; AVX512:       # %bb.0: # %entry261; AVX512-NEXT:    vcvttsd2si %xmm0, %eax262; AVX512-NEXT:    # kill: def $al killed $al killed $eax263; AVX512-NEXT:    retq264entry:265  %conv = fptosi double %x to i8266  ret i8 %conv267}268 269define i31 @test_double_to_si31(double %x) {270; X64-LABEL: test_double_to_si31:271; X64:       # %bb.0: # %entry272; X64-NEXT:    cvttsd2si %xmm0, %eax273; X64-NEXT:    retq274;275; AVX512-LABEL: test_double_to_si31:276; AVX512:       # %bb.0: # %entry277; AVX512-NEXT:    vcvttsd2si %xmm0, %eax278; AVX512-NEXT:    retq279entry:280  %conv = fptosi double %x to i31281  ret i31 %conv282}283 284define i33 @test_double_to_si33(double %x) {285; X64-LABEL: test_double_to_si33:286; X64:       # %bb.0: # %entry287; X64-NEXT:    cvttsd2si %xmm0, %rax288; X64-NEXT:    retq289;290; AVX512-LABEL: test_double_to_si33:291; AVX512:       # %bb.0: # %entry292; AVX512-NEXT:    vcvttsd2si %xmm0, %rax293; AVX512-NEXT:    retq294entry:295  %conv = fptosi double %x to i33296  ret i33 %conv297}298 299define i64 @test_float_to_si64(float %x) {300; X64-LABEL: test_float_to_si64:301; X64:       # %bb.0: # %entry302; X64-NEXT:    cvttss2si %xmm0, %rax303; X64-NEXT:    retq304;305; AVX512-LABEL: test_float_to_si64:306; AVX512:       # %bb.0: # %entry307; AVX512-NEXT:    vcvttss2si %xmm0, %rax308; AVX512-NEXT:    retq309entry:310  %conv = fptosi float %x to i64311  ret i64 %conv312}313 314define i32 @test_float_to_si32(float %x) {315; X64-LABEL: test_float_to_si32:316; X64:       # %bb.0: # %entry317; X64-NEXT:    cvttss2si %xmm0, %eax318; X64-NEXT:    retq319;320; AVX512-LABEL: test_float_to_si32:321; AVX512:       # %bb.0: # %entry322; AVX512-NEXT:    vcvttss2si %xmm0, %eax323; AVX512-NEXT:    retq324entry:325  %conv = fptosi float %x to i32326  ret i32 %conv327}328 329define signext i16 @test_float_to_si16(float %x) {330; X64-LABEL: test_float_to_si16:331; X64:       # %bb.0: # %entry332; X64-NEXT:    cvttss2si %xmm0, %eax333; X64-NEXT:    # kill: def $ax killed $ax killed $eax334; X64-NEXT:    retq335;336; AVX512-LABEL: test_float_to_si16:337; AVX512:       # %bb.0: # %entry338; AVX512-NEXT:    vcvttss2si %xmm0, %eax339; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax340; AVX512-NEXT:    retq341entry:342  %conv = fptosi float %x to i16343  ret i16 %conv344}345 346define signext i8 @test_float_to_si8(float %x) {347; X64-LABEL: test_float_to_si8:348; X64:       # %bb.0: # %entry349; X64-NEXT:    cvttss2si %xmm0, %eax350; X64-NEXT:    # kill: def $al killed $al killed $eax351; X64-NEXT:    retq352;353; AVX512-LABEL: test_float_to_si8:354; AVX512:       # %bb.0: # %entry355; AVX512-NEXT:    vcvttss2si %xmm0, %eax356; AVX512-NEXT:    # kill: def $al killed $al killed $eax357; AVX512-NEXT:    retq358entry:359  %conv = fptosi float %x to i8360  ret i8 %conv361}362 363define i31 @test_float_to_si31(float %x) {364; X64-LABEL: test_float_to_si31:365; X64:       # %bb.0: # %entry366; X64-NEXT:    cvttss2si %xmm0, %eax367; X64-NEXT:    retq368;369; AVX512-LABEL: test_float_to_si31:370; AVX512:       # %bb.0: # %entry371; AVX512-NEXT:    vcvttss2si %xmm0, %eax372; AVX512-NEXT:    retq373entry:374  %conv = fptosi float %x to i31375  ret i31 %conv376}377 378define i33 @test_float_to_si33(float %x) {379; X64-LABEL: test_float_to_si33:380; X64:       # %bb.0: # %entry381; X64-NEXT:    cvttss2si %xmm0, %rax382; X64-NEXT:    retq383;384; AVX512-LABEL: test_float_to_si33:385; AVX512:       # %bb.0: # %entry386; AVX512-NEXT:    vcvttss2si %xmm0, %rax387; AVX512-NEXT:    retq388entry:389  %conv = fptosi float %x to i33390  ret i33 %conv391}392