brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.0 KiB · 0a00a72 Raw
546 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X864 5; shift left6 7define i32 @and_signbit_shl(i32 %x, ptr %dst) {8; X64-LABEL: and_signbit_shl:9; X64:       # %bb.0:10; X64-NEXT:    movl %edi, %eax11; X64-NEXT:    shll $8, %eax12; X64-NEXT:    andl $-16777216, %eax # imm = 0xFF00000013; X64-NEXT:    movl %eax, (%rsi)14; X64-NEXT:    retq15;16; X86-LABEL: and_signbit_shl:17; X86:       # %bb.0:18; X86-NEXT:    movl 8(%esp), %ecx19; X86-NEXT:    movzbl 6(%esp), %eax20; X86-NEXT:    shll $24, %eax21; X86-NEXT:    movl %eax, (%ecx)22; X86-NEXT:    retl23  %t0 = and i32 %x, 4294901760 ; 0xFFFF000024  %r = shl i32 %t0, 825  store i32 %r, ptr %dst26  ret i32 %r27}28define i32 @and_nosignbit_shl(i32 %x, ptr %dst) {29; X64-LABEL: and_nosignbit_shl:30; X64:       # %bb.0:31; X64-NEXT:    movl %edi, %eax32; X64-NEXT:    shll $8, %eax33; X64-NEXT:    andl $-16777216, %eax # imm = 0xFF00000034; X64-NEXT:    movl %eax, (%rsi)35; X64-NEXT:    retq36;37; X86-LABEL: and_nosignbit_shl:38; X86:       # %bb.0:39; X86-NEXT:    movl 8(%esp), %ecx40; X86-NEXT:    movzbl 6(%esp), %eax41; X86-NEXT:    shll $24, %eax42; X86-NEXT:    movl %eax, (%ecx)43; X86-NEXT:    retl44  %t0 = and i32 %x, 2147418112 ; 0x7FFF000045  %r = shl i32 %t0, 846  store i32 %r, ptr %dst47  ret i32 %r48}49 50define i32 @or_signbit_shl(i32 %x, ptr %dst) {51; X64-LABEL: or_signbit_shl:52; X64:       # %bb.0:53; X64-NEXT:    movl %edi, %eax54; X64-NEXT:    shll $8, %eax55; X64-NEXT:    orl $-16777216, %eax # imm = 0xFF00000056; X64-NEXT:    movl %eax, (%rsi)57; X64-NEXT:    retq58;59; X86-LABEL: or_signbit_shl:60; X86:       # %bb.0:61; X86-NEXT:    movl 8(%esp), %ecx62; X86-NEXT:    movl 4(%esp), %eax63; X86-NEXT:    shll $8, %eax64; X86-NEXT:    orl $-16777216, %eax # imm = 0xFF00000065; X86-NEXT:    movl %eax, (%ecx)66; X86-NEXT:    retl67  %t0 = or i32 %x, 4294901760 ; 0xFFFF000068  %r = shl i32 %t0, 869  store i32 %r, ptr %dst70  ret i32 %r71}72define i32 @or_nosignbit_shl(i32 %x, ptr %dst) {73; X64-LABEL: or_nosignbit_shl:74; X64:       # %bb.0:75; X64-NEXT:    movl %edi, %eax76; X64-NEXT:    shll $8, %eax77; X64-NEXT:    orl $-16777216, %eax # imm = 0xFF00000078; X64-NEXT:    movl %eax, (%rsi)79; X64-NEXT:    retq80;81; X86-LABEL: or_nosignbit_shl:82; X86:       # %bb.0:83; X86-NEXT:    movl 8(%esp), %ecx84; X86-NEXT:    movl 4(%esp), %eax85; X86-NEXT:    shll $8, %eax86; X86-NEXT:    orl $-16777216, %eax # imm = 0xFF00000087; X86-NEXT:    movl %eax, (%ecx)88; X86-NEXT:    retl89  %t0 = or i32 %x, 2147418112 ; 0x7FFF000090  %r = shl i32 %t0, 891  store i32 %r, ptr %dst92  ret i32 %r93}94 95define i32 @xor_signbit_shl(i32 %x, ptr %dst) {96; X64-LABEL: xor_signbit_shl:97; X64:       # %bb.0:98; X64-NEXT:    movl %edi, %eax99; X64-NEXT:    shll $8, %eax100; X64-NEXT:    xorl $-16777216, %eax # imm = 0xFF000000101; X64-NEXT:    movl %eax, (%rsi)102; X64-NEXT:    retq103;104; X86-LABEL: xor_signbit_shl:105; X86:       # %bb.0:106; X86-NEXT:    movl 8(%esp), %ecx107; X86-NEXT:    movl $16711680, %eax # imm = 0xFF0000108; X86-NEXT:    xorl 4(%esp), %eax109; X86-NEXT:    shll $8, %eax110; X86-NEXT:    movl %eax, (%ecx)111; X86-NEXT:    retl112  %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000113  %r = shl i32 %t0, 8114  store i32 %r, ptr %dst115  ret i32 %r116}117define i32 @xor_nosignbit_shl(i32 %x, ptr %dst) {118; X64-LABEL: xor_nosignbit_shl:119; X64:       # %bb.0:120; X64-NEXT:    movl %edi, %eax121; X64-NEXT:    shll $8, %eax122; X64-NEXT:    xorl $-16777216, %eax # imm = 0xFF000000123; X64-NEXT:    movl %eax, (%rsi)124; X64-NEXT:    retq125;126; X86-LABEL: xor_nosignbit_shl:127; X86:       # %bb.0:128; X86-NEXT:    movl 8(%esp), %ecx129; X86-NEXT:    movl $16711680, %eax # imm = 0xFF0000130; X86-NEXT:    xorl 4(%esp), %eax131; X86-NEXT:    shll $8, %eax132; X86-NEXT:    movl %eax, (%ecx)133; X86-NEXT:    retl134  %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000135  %r = shl i32 %t0, 8136  store i32 %r, ptr %dst137  ret i32 %r138}139 140define i32 @add_signbit_shl(i32 %x, ptr %dst) {141; X64-LABEL: add_signbit_shl:142; X64:       # %bb.0:143; X64-NEXT:    # kill: def $edi killed $edi def $rdi144; X64-NEXT:    shll $8, %edi145; X64-NEXT:    leal -16777216(%rdi), %eax146; X64-NEXT:    movl %eax, (%rsi)147; X64-NEXT:    retq148;149; X86-LABEL: add_signbit_shl:150; X86:       # %bb.0:151; X86-NEXT:    movl 8(%esp), %ecx152; X86-NEXT:    movl 4(%esp), %eax153; X86-NEXT:    shll $8, %eax154; X86-NEXT:    addl $-16777216, %eax # imm = 0xFF000000155; X86-NEXT:    movl %eax, (%ecx)156; X86-NEXT:    retl157  %t0 = add i32 %x, 4294901760 ; 0xFFFF0000158  %r = shl i32 %t0, 8159  store i32 %r, ptr %dst160  ret i32 %r161}162define i32 @add_nosignbit_shl(i32 %x, ptr %dst) {163; X64-LABEL: add_nosignbit_shl:164; X64:       # %bb.0:165; X64-NEXT:    # kill: def $edi killed $edi def $rdi166; X64-NEXT:    shll $8, %edi167; X64-NEXT:    leal -16777216(%rdi), %eax168; X64-NEXT:    movl %eax, (%rsi)169; X64-NEXT:    retq170;171; X86-LABEL: add_nosignbit_shl:172; X86:       # %bb.0:173; X86-NEXT:    movl 8(%esp), %ecx174; X86-NEXT:    movl 4(%esp), %eax175; X86-NEXT:    shll $8, %eax176; X86-NEXT:    addl $-16777216, %eax # imm = 0xFF000000177; X86-NEXT:    movl %eax, (%ecx)178; X86-NEXT:    retl179  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000180  %r = shl i32 %t0, 8181  store i32 %r, ptr %dst182  ret i32 %r183}184 185; logical shift right186 187define i32 @and_signbit_lshr(i32 %x, ptr %dst) {188; X64-LABEL: and_signbit_lshr:189; X64:       # %bb.0:190; X64-NEXT:    movl %edi, %eax191; X64-NEXT:    shrl $8, %eax192; X64-NEXT:    andl $16776960, %eax # imm = 0xFFFF00193; X64-NEXT:    movl %eax, (%rsi)194; X64-NEXT:    retq195;196; X86-LABEL: and_signbit_lshr:197; X86:       # %bb.0:198; X86-NEXT:    movl 8(%esp), %ecx199; X86-NEXT:    movzwl 6(%esp), %eax200; X86-NEXT:    shll $8, %eax201; X86-NEXT:    movl %eax, (%ecx)202; X86-NEXT:    retl203  %t0 = and i32 %x, 4294901760 ; 0xFFFF0000204  %r = lshr i32 %t0, 8205  store i32 %r, ptr %dst206  ret i32 %r207}208define i32 @and_nosignbit_lshr(i32 %x, ptr %dst) {209; X64-LABEL: and_nosignbit_lshr:210; X64:       # %bb.0:211; X64-NEXT:    movl %edi, %eax212; X64-NEXT:    shrl $8, %eax213; X64-NEXT:    andl $8388352, %eax # imm = 0x7FFF00214; X64-NEXT:    movl %eax, (%rsi)215; X64-NEXT:    retq216;217; X86-LABEL: and_nosignbit_lshr:218; X86:       # %bb.0:219; X86-NEXT:    movl 8(%esp), %ecx220; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000221; X86-NEXT:    andl 4(%esp), %eax222; X86-NEXT:    shrl $8, %eax223; X86-NEXT:    movl %eax, (%ecx)224; X86-NEXT:    retl225  %t0 = and i32 %x, 2147418112 ; 0x7FFF0000226  %r = lshr i32 %t0, 8227  store i32 %r, ptr %dst228  ret i32 %r229}230 231define i32 @or_signbit_lshr(i32 %x, ptr %dst) {232; X64-LABEL: or_signbit_lshr:233; X64:       # %bb.0:234; X64-NEXT:    movl %edi, %eax235; X64-NEXT:    shrl $8, %eax236; X64-NEXT:    orl $16776960, %eax # imm = 0xFFFF00237; X64-NEXT:    movl %eax, (%rsi)238; X64-NEXT:    retq239;240; X86-LABEL: or_signbit_lshr:241; X86:       # %bb.0:242; X86-NEXT:    movl 8(%esp), %ecx243; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000244; X86-NEXT:    orl 4(%esp), %eax245; X86-NEXT:    shrl $8, %eax246; X86-NEXT:    movl %eax, (%ecx)247; X86-NEXT:    retl248  %t0 = or i32 %x, 4294901760 ; 0xFFFF0000249  %r = lshr i32 %t0, 8250  store i32 %r, ptr %dst251  ret i32 %r252}253define i32 @or_nosignbit_lshr(i32 %x, ptr %dst) {254; X64-LABEL: or_nosignbit_lshr:255; X64:       # %bb.0:256; X64-NEXT:    movl %edi, %eax257; X64-NEXT:    shrl $8, %eax258; X64-NEXT:    orl $8388352, %eax # imm = 0x7FFF00259; X64-NEXT:    movl %eax, (%rsi)260; X64-NEXT:    retq261;262; X86-LABEL: or_nosignbit_lshr:263; X86:       # %bb.0:264; X86-NEXT:    movl 8(%esp), %ecx265; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000266; X86-NEXT:    orl 4(%esp), %eax267; X86-NEXT:    shrl $8, %eax268; X86-NEXT:    movl %eax, (%ecx)269; X86-NEXT:    retl270  %t0 = or i32 %x, 2147418112 ; 0x7FFF0000271  %r = lshr i32 %t0, 8272  store i32 %r, ptr %dst273  ret i32 %r274}275 276define i32 @xor_signbit_lshr(i32 %x, ptr %dst) {277; X64-LABEL: xor_signbit_lshr:278; X64:       # %bb.0:279; X64-NEXT:    movl %edi, %eax280; X64-NEXT:    shrl $8, %eax281; X64-NEXT:    xorl $16776960, %eax # imm = 0xFFFF00282; X64-NEXT:    movl %eax, (%rsi)283; X64-NEXT:    retq284;285; X86-LABEL: xor_signbit_lshr:286; X86:       # %bb.0:287; X86-NEXT:    movl 8(%esp), %ecx288; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000289; X86-NEXT:    xorl 4(%esp), %eax290; X86-NEXT:    shrl $8, %eax291; X86-NEXT:    movl %eax, (%ecx)292; X86-NEXT:    retl293  %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000294  %r = lshr i32 %t0, 8295  store i32 %r, ptr %dst296  ret i32 %r297}298define i32 @xor_nosignbit_lshr(i32 %x, ptr %dst) {299; X64-LABEL: xor_nosignbit_lshr:300; X64:       # %bb.0:301; X64-NEXT:    movl %edi, %eax302; X64-NEXT:    shrl $8, %eax303; X64-NEXT:    xorl $8388352, %eax # imm = 0x7FFF00304; X64-NEXT:    movl %eax, (%rsi)305; X64-NEXT:    retq306;307; X86-LABEL: xor_nosignbit_lshr:308; X86:       # %bb.0:309; X86-NEXT:    movl 8(%esp), %ecx310; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000311; X86-NEXT:    xorl 4(%esp), %eax312; X86-NEXT:    shrl $8, %eax313; X86-NEXT:    movl %eax, (%ecx)314; X86-NEXT:    retl315  %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000316  %r = lshr i32 %t0, 8317  store i32 %r, ptr %dst318  ret i32 %r319}320 321define i32 @add_signbit_lshr(i32 %x, ptr %dst) {322; X64-LABEL: add_signbit_lshr:323; X64:       # %bb.0:324; X64-NEXT:    # kill: def $edi killed $edi def $rdi325; X64-NEXT:    leal -65536(%rdi), %eax326; X64-NEXT:    shrl $8, %eax327; X64-NEXT:    movl %eax, (%rsi)328; X64-NEXT:    retq329;330; X86-LABEL: add_signbit_lshr:331; X86:       # %bb.0:332; X86-NEXT:    movl 8(%esp), %ecx333; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000334; X86-NEXT:    addl 4(%esp), %eax335; X86-NEXT:    shrl $8, %eax336; X86-NEXT:    movl %eax, (%ecx)337; X86-NEXT:    retl338  %t0 = add i32 %x, 4294901760 ; 0xFFFF0000339  %r = lshr i32 %t0, 8340  store i32 %r, ptr %dst341  ret i32 %r342}343define i32 @add_nosignbit_lshr(i32 %x, ptr %dst) {344; X64-LABEL: add_nosignbit_lshr:345; X64:       # %bb.0:346; X64-NEXT:    # kill: def $edi killed $edi def $rdi347; X64-NEXT:    leal 2147418112(%rdi), %eax348; X64-NEXT:    shrl $8, %eax349; X64-NEXT:    movl %eax, (%rsi)350; X64-NEXT:    retq351;352; X86-LABEL: add_nosignbit_lshr:353; X86:       # %bb.0:354; X86-NEXT:    movl 8(%esp), %ecx355; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000356; X86-NEXT:    addl 4(%esp), %eax357; X86-NEXT:    shrl $8, %eax358; X86-NEXT:    movl %eax, (%ecx)359; X86-NEXT:    retl360  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000361  %r = lshr i32 %t0, 8362  store i32 %r, ptr %dst363  ret i32 %r364}365 366; arithmetic shift right367 368define i32 @and_signbit_ashr(i32 %x, ptr %dst) {369; X64-LABEL: and_signbit_ashr:370; X64:       # %bb.0:371; X64-NEXT:    movl %edi, %eax372; X64-NEXT:    sarl $8, %eax373; X64-NEXT:    andl $-256, %eax374; X64-NEXT:    movl %eax, (%rsi)375; X64-NEXT:    retq376;377; X86-LABEL: and_signbit_ashr:378; X86:       # %bb.0:379; X86-NEXT:    movl 8(%esp), %ecx380; X86-NEXT:    movswl 6(%esp), %eax381; X86-NEXT:    shll $8, %eax382; X86-NEXT:    movl %eax, (%ecx)383; X86-NEXT:    retl384  %t0 = and i32 %x, 4294901760 ; 0xFFFF0000385  %r = ashr i32 %t0, 8386  store i32 %r, ptr %dst387  ret i32 %r388}389define i32 @and_nosignbit_ashr(i32 %x, ptr %dst) {390; X64-LABEL: and_nosignbit_ashr:391; X64:       # %bb.0:392; X64-NEXT:    movl %edi, %eax393; X64-NEXT:    shrl $8, %eax394; X64-NEXT:    andl $8388352, %eax # imm = 0x7FFF00395; X64-NEXT:    movl %eax, (%rsi)396; X64-NEXT:    retq397;398; X86-LABEL: and_nosignbit_ashr:399; X86:       # %bb.0:400; X86-NEXT:    movl 8(%esp), %ecx401; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000402; X86-NEXT:    andl 4(%esp), %eax403; X86-NEXT:    shrl $8, %eax404; X86-NEXT:    movl %eax, (%ecx)405; X86-NEXT:    retl406  %t0 = and i32 %x, 2147418112 ; 0x7FFF0000407  %r = ashr i32 %t0, 8408  store i32 %r, ptr %dst409  ret i32 %r410}411 412define i32 @or_signbit_ashr(i32 %x, ptr %dst) {413; X64-LABEL: or_signbit_ashr:414; X64:       # %bb.0:415; X64-NEXT:    movl %edi, %eax416; X64-NEXT:    shrl $8, %eax417; X64-NEXT:    orl $-256, %eax418; X64-NEXT:    movl %eax, (%rsi)419; X64-NEXT:    retq420;421; X86-LABEL: or_signbit_ashr:422; X86:       # %bb.0:423; X86-NEXT:    movl 8(%esp), %ecx424; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000425; X86-NEXT:    orl 4(%esp), %eax426; X86-NEXT:    sarl $8, %eax427; X86-NEXT:    movl %eax, (%ecx)428; X86-NEXT:    retl429  %t0 = or i32 %x, 4294901760 ; 0xFFFF0000430  %r = ashr i32 %t0, 8431  store i32 %r, ptr %dst432  ret i32 %r433}434define i32 @or_nosignbit_ashr(i32 %x, ptr %dst) {435; X64-LABEL: or_nosignbit_ashr:436; X64:       # %bb.0:437; X64-NEXT:    movl %edi, %eax438; X64-NEXT:    sarl $8, %eax439; X64-NEXT:    orl $8388352, %eax # imm = 0x7FFF00440; X64-NEXT:    movl %eax, (%rsi)441; X64-NEXT:    retq442;443; X86-LABEL: or_nosignbit_ashr:444; X86:       # %bb.0:445; X86-NEXT:    movl 8(%esp), %ecx446; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000447; X86-NEXT:    orl 4(%esp), %eax448; X86-NEXT:    sarl $8, %eax449; X86-NEXT:    movl %eax, (%ecx)450; X86-NEXT:    retl451  %t0 = or i32 %x, 2147418112 ; 0x7FFF0000452  %r = ashr i32 %t0, 8453  store i32 %r, ptr %dst454  ret i32 %r455}456 457define i32 @xor_signbit_ashr(i32 %x, ptr %dst) {458; X64-LABEL: xor_signbit_ashr:459; X64:       # %bb.0:460; X64-NEXT:    movl %edi, %eax461; X64-NEXT:    sarl $8, %eax462; X64-NEXT:    xorl $-256, %eax463; X64-NEXT:    movl %eax, (%rsi)464; X64-NEXT:    retq465;466; X86-LABEL: xor_signbit_ashr:467; X86:       # %bb.0:468; X86-NEXT:    movl 8(%esp), %ecx469; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000470; X86-NEXT:    xorl 4(%esp), %eax471; X86-NEXT:    sarl $8, %eax472; X86-NEXT:    movl %eax, (%ecx)473; X86-NEXT:    retl474  %t0 = xor i32 %x, 4294901760 ; 0xFFFF0000475  %r = ashr i32 %t0, 8476  store i32 %r, ptr %dst477  ret i32 %r478}479define i32 @xor_nosignbit_ashr(i32 %x, ptr %dst) {480; X64-LABEL: xor_nosignbit_ashr:481; X64:       # %bb.0:482; X64-NEXT:    movl %edi, %eax483; X64-NEXT:    sarl $8, %eax484; X64-NEXT:    xorl $8388352, %eax # imm = 0x7FFF00485; X64-NEXT:    movl %eax, (%rsi)486; X64-NEXT:    retq487;488; X86-LABEL: xor_nosignbit_ashr:489; X86:       # %bb.0:490; X86-NEXT:    movl 8(%esp), %ecx491; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000492; X86-NEXT:    xorl 4(%esp), %eax493; X86-NEXT:    sarl $8, %eax494; X86-NEXT:    movl %eax, (%ecx)495; X86-NEXT:    retl496  %t0 = xor i32 %x, 2147418112 ; 0x7FFF0000497  %r = ashr i32 %t0, 8498  store i32 %r, ptr %dst499  ret i32 %r500}501 502define i32 @add_signbit_ashr(i32 %x, ptr %dst) {503; X64-LABEL: add_signbit_ashr:504; X64:       # %bb.0:505; X64-NEXT:    # kill: def $edi killed $edi def $rdi506; X64-NEXT:    leal -65536(%rdi), %eax507; X64-NEXT:    sarl $8, %eax508; X64-NEXT:    movl %eax, (%rsi)509; X64-NEXT:    retq510;511; X86-LABEL: add_signbit_ashr:512; X86:       # %bb.0:513; X86-NEXT:    movl 8(%esp), %ecx514; X86-NEXT:    movl $-65536, %eax # imm = 0xFFFF0000515; X86-NEXT:    addl 4(%esp), %eax516; X86-NEXT:    sarl $8, %eax517; X86-NEXT:    movl %eax, (%ecx)518; X86-NEXT:    retl519  %t0 = add i32 %x, 4294901760 ; 0xFFFF0000520  %r = ashr i32 %t0, 8521  store i32 %r, ptr %dst522  ret i32 %r523}524define i32 @add_nosignbit_ashr(i32 %x, ptr %dst) {525; X64-LABEL: add_nosignbit_ashr:526; X64:       # %bb.0:527; X64-NEXT:    # kill: def $edi killed $edi def $rdi528; X64-NEXT:    leal 2147418112(%rdi), %eax529; X64-NEXT:    sarl $8, %eax530; X64-NEXT:    movl %eax, (%rsi)531; X64-NEXT:    retq532;533; X86-LABEL: add_nosignbit_ashr:534; X86:       # %bb.0:535; X86-NEXT:    movl 8(%esp), %ecx536; X86-NEXT:    movl $2147418112, %eax # imm = 0x7FFF0000537; X86-NEXT:    addl 4(%esp), %eax538; X86-NEXT:    sarl $8, %eax539; X86-NEXT:    movl %eax, (%ecx)540; X86-NEXT:    retl541  %t0 = add i32 %x, 2147418112 ; 0x7FFF0000542  %r = ashr i32 %t0, 8543  store i32 %r, ptr %dst544  ret i32 %r545}546