brintos

brintos / llvm-project-archived public Read only

0
0
Text · 37.4 KiB · 476dcf0 Raw
1242 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-apple-darwin10 | FileCheck %s --check-prefixes=X86,SDAG,SDAG-X863; RUN: llc < %s -mtriple=i686-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86,FASTISEL-X864; TODO: llc < %s -mtriple=i686-apple-darwin10 -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X86,GISEL-X865; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=X64,SDAG,SDAG-X646; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64,FASTISEL-X647; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X64,GISEL-X648 9define i8 @shl_i8(i8 %a, i8 %b) {10; X86-LABEL: shl_i8:11; X86:       ## %bb.0:12; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx13; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax14; X86-NEXT:    shlb %cl, %al15; X86-NEXT:    retl16;17; SDAG-X64-LABEL: shl_i8:18; SDAG-X64:       ## %bb.0:19; SDAG-X64-NEXT:    movl %esi, %ecx20; SDAG-X64-NEXT:    movl %edi, %eax21; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx22; SDAG-X64-NEXT:    shlb %cl, %al23; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax24; SDAG-X64-NEXT:    retq25;26; FASTISEL-X64-LABEL: shl_i8:27; FASTISEL-X64:       ## %bb.0:28; FASTISEL-X64-NEXT:    movl %esi, %ecx29; FASTISEL-X64-NEXT:    movl %edi, %eax30; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx31; FASTISEL-X64-NEXT:    shlb %cl, %al32; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax33; FASTISEL-X64-NEXT:    retq34;35; GISEL-X64-LABEL: shl_i8:36; GISEL-X64:       ## %bb.0:37; GISEL-X64-NEXT:    movl %edi, %eax38; GISEL-X64-NEXT:    movl %esi, %ecx39; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx40; GISEL-X64-NEXT:    shlb %cl, %al41; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax42; GISEL-X64-NEXT:    retq43  %c = shl i8 %a, %b44  ret i8 %c45}46 47define i16 @shl_i16(i16 %a, i16 %b) {48; SDAG-X86-LABEL: shl_i16:49; SDAG-X86:       ## %bb.0:50; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx51; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax52; SDAG-X86-NEXT:    shll %cl, %eax53; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax54; SDAG-X86-NEXT:    retl55;56; FASTISEL-X86-LABEL: shl_i16:57; FASTISEL-X86:       ## %bb.0:58; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx59; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax60; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx61; FASTISEL-X86-NEXT:    shlw %cl, %ax62; FASTISEL-X86-NEXT:    retl63;64; SDAG-X64-LABEL: shl_i16:65; SDAG-X64:       ## %bb.0:66; SDAG-X64-NEXT:    movl %esi, %ecx67; SDAG-X64-NEXT:    movl %edi, %eax68; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx69; SDAG-X64-NEXT:    shll %cl, %eax70; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax71; SDAG-X64-NEXT:    retq72;73; FASTISEL-X64-LABEL: shl_i16:74; FASTISEL-X64:       ## %bb.0:75; FASTISEL-X64-NEXT:    movl %esi, %ecx76; FASTISEL-X64-NEXT:    movl %edi, %eax77; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx78; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx79; FASTISEL-X64-NEXT:    shlw %cl, %ax80; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax81; FASTISEL-X64-NEXT:    retq82;83; GISEL-X64-LABEL: shl_i16:84; GISEL-X64:       ## %bb.0:85; GISEL-X64-NEXT:    movl %edi, %eax86; GISEL-X64-NEXT:    movl %esi, %ecx87; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx88; GISEL-X64-NEXT:    shlw %cl, %ax89; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax90; GISEL-X64-NEXT:    retq91  %c = shl i16 %a, %b92  ret i16 %c93}94 95define i32 @shl_i32(i32 %a, i32 %b) {96; SDAG-X86-LABEL: shl_i32:97; SDAG-X86:       ## %bb.0:98; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx99; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax100; SDAG-X86-NEXT:    shll %cl, %eax101; SDAG-X86-NEXT:    retl102;103; FASTISEL-X86-LABEL: shl_i32:104; FASTISEL-X86:       ## %bb.0:105; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx106; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax107; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx108; FASTISEL-X86-NEXT:    shll %cl, %eax109; FASTISEL-X86-NEXT:    retl110;111; SDAG-X64-LABEL: shl_i32:112; SDAG-X64:       ## %bb.0:113; SDAG-X64-NEXT:    movl %esi, %ecx114; SDAG-X64-NEXT:    movl %edi, %eax115; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx116; SDAG-X64-NEXT:    shll %cl, %eax117; SDAG-X64-NEXT:    retq118;119; FASTISEL-X64-LABEL: shl_i32:120; FASTISEL-X64:       ## %bb.0:121; FASTISEL-X64-NEXT:    movl %esi, %ecx122; FASTISEL-X64-NEXT:    movl %edi, %eax123; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx124; FASTISEL-X64-NEXT:    shll %cl, %eax125; FASTISEL-X64-NEXT:    retq126;127; GISEL-X64-LABEL: shl_i32:128; GISEL-X64:       ## %bb.0:129; GISEL-X64-NEXT:    movl %edi, %eax130; GISEL-X64-NEXT:    movl %esi, %ecx131; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx132; GISEL-X64-NEXT:    shll %cl, %eax133; GISEL-X64-NEXT:    retq134  %c = shl i32 %a, %b135  ret i32 %c136}137 138define i64 @shl_i64(i64 %a, i64 %b) nounwind {139; SDAG-X86-LABEL: shl_i64:140; SDAG-X86:       ## %bb.0:141; SDAG-X86-NEXT:    pushl %esi142; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx143; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi144; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx145; SDAG-X86-NEXT:    movl %esi, %eax146; SDAG-X86-NEXT:    shll %cl, %eax147; SDAG-X86-NEXT:    shldl %cl, %esi, %edx148; SDAG-X86-NEXT:    testb $32, %cl149; SDAG-X86-NEXT:    je LBB3_2150; SDAG-X86-NEXT:  ## %bb.1:151; SDAG-X86-NEXT:    movl %eax, %edx152; SDAG-X86-NEXT:    xorl %eax, %eax153; SDAG-X86-NEXT:  LBB3_2:154; SDAG-X86-NEXT:    popl %esi155; SDAG-X86-NEXT:    retl156;157; FASTISEL-X86-LABEL: shl_i64:158; FASTISEL-X86:       ## %bb.0:159; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx160; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx161; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax162; FASTISEL-X86-NEXT:    shldl %cl, %eax, %edx163; FASTISEL-X86-NEXT:    shll %cl, %eax164; FASTISEL-X86-NEXT:    testb $32, %cl165; FASTISEL-X86-NEXT:    je LBB3_2166; FASTISEL-X86-NEXT:  ## %bb.1:167; FASTISEL-X86-NEXT:    movl %eax, %edx168; FASTISEL-X86-NEXT:    xorl %eax, %eax169; FASTISEL-X86-NEXT:  LBB3_2:170; FASTISEL-X86-NEXT:    retl171;172; SDAG-X64-LABEL: shl_i64:173; SDAG-X64:       ## %bb.0:174; SDAG-X64-NEXT:    movq %rsi, %rcx175; SDAG-X64-NEXT:    movq %rdi, %rax176; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx177; SDAG-X64-NEXT:    shlq %cl, %rax178; SDAG-X64-NEXT:    retq179;180; FASTISEL-X64-LABEL: shl_i64:181; FASTISEL-X64:       ## %bb.0:182; FASTISEL-X64-NEXT:    movq %rsi, %rcx183; FASTISEL-X64-NEXT:    movq %rdi, %rax184; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx185; FASTISEL-X64-NEXT:    shlq %cl, %rax186; FASTISEL-X64-NEXT:    retq187;188; GISEL-X64-LABEL: shl_i64:189; GISEL-X64:       ## %bb.0:190; GISEL-X64-NEXT:    movq %rdi, %rax191; GISEL-X64-NEXT:    movq %rsi, %rcx192; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx193; GISEL-X64-NEXT:    shlq %cl, %rax194; GISEL-X64-NEXT:    retq195  %c = shl i64 %a, %b196  ret i64 %c197}198 199define i8 @lshr_i8(i8 %a, i8 %b) {200; X86-LABEL: lshr_i8:201; X86:       ## %bb.0:202; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx203; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax204; X86-NEXT:    shrb %cl, %al205; X86-NEXT:    retl206;207; SDAG-X64-LABEL: lshr_i8:208; SDAG-X64:       ## %bb.0:209; SDAG-X64-NEXT:    movl %esi, %ecx210; SDAG-X64-NEXT:    movl %edi, %eax211; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx212; SDAG-X64-NEXT:    shrb %cl, %al213; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax214; SDAG-X64-NEXT:    retq215;216; FASTISEL-X64-LABEL: lshr_i8:217; FASTISEL-X64:       ## %bb.0:218; FASTISEL-X64-NEXT:    movl %esi, %ecx219; FASTISEL-X64-NEXT:    movl %edi, %eax220; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx221; FASTISEL-X64-NEXT:    shrb %cl, %al222; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax223; FASTISEL-X64-NEXT:    retq224;225; GISEL-X64-LABEL: lshr_i8:226; GISEL-X64:       ## %bb.0:227; GISEL-X64-NEXT:    movl %edi, %eax228; GISEL-X64-NEXT:    movl %esi, %ecx229; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx230; GISEL-X64-NEXT:    shrb %cl, %al231; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax232; GISEL-X64-NEXT:    retq233  %c = lshr i8 %a, %b234  ret i8 %c235}236 237define i16 @lshr_i16(i16 %a, i16 %b) {238; SDAG-X86-LABEL: lshr_i16:239; SDAG-X86:       ## %bb.0:240; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx241; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax242; SDAG-X86-NEXT:    shrl %cl, %eax243; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax244; SDAG-X86-NEXT:    retl245;246; FASTISEL-X86-LABEL: lshr_i16:247; FASTISEL-X86:       ## %bb.0:248; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx249; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax250; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx251; FASTISEL-X86-NEXT:    shrw %cl, %ax252; FASTISEL-X86-NEXT:    retl253;254; SDAG-X64-LABEL: lshr_i16:255; SDAG-X64:       ## %bb.0:256; SDAG-X64-NEXT:    movl %esi, %ecx257; SDAG-X64-NEXT:    movzwl %di, %eax258; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx259; SDAG-X64-NEXT:    shrl %cl, %eax260; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax261; SDAG-X64-NEXT:    retq262;263; FASTISEL-X64-LABEL: lshr_i16:264; FASTISEL-X64:       ## %bb.0:265; FASTISEL-X64-NEXT:    movl %esi, %ecx266; FASTISEL-X64-NEXT:    movl %edi, %eax267; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx268; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx269; FASTISEL-X64-NEXT:    shrw %cl, %ax270; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax271; FASTISEL-X64-NEXT:    retq272;273; GISEL-X64-LABEL: lshr_i16:274; GISEL-X64:       ## %bb.0:275; GISEL-X64-NEXT:    movl %edi, %eax276; GISEL-X64-NEXT:    movl %esi, %ecx277; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx278; GISEL-X64-NEXT:    shrw %cl, %ax279; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax280; GISEL-X64-NEXT:    retq281  %c = lshr i16 %a, %b282  ret i16 %c283}284 285define i32 @lshr_i32(i32 %a, i32 %b) {286; SDAG-X86-LABEL: lshr_i32:287; SDAG-X86:       ## %bb.0:288; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx289; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax290; SDAG-X86-NEXT:    shrl %cl, %eax291; SDAG-X86-NEXT:    retl292;293; FASTISEL-X86-LABEL: lshr_i32:294; FASTISEL-X86:       ## %bb.0:295; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx296; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax297; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx298; FASTISEL-X86-NEXT:    shrl %cl, %eax299; FASTISEL-X86-NEXT:    retl300;301; SDAG-X64-LABEL: lshr_i32:302; SDAG-X64:       ## %bb.0:303; SDAG-X64-NEXT:    movl %esi, %ecx304; SDAG-X64-NEXT:    movl %edi, %eax305; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx306; SDAG-X64-NEXT:    shrl %cl, %eax307; SDAG-X64-NEXT:    retq308;309; FASTISEL-X64-LABEL: lshr_i32:310; FASTISEL-X64:       ## %bb.0:311; FASTISEL-X64-NEXT:    movl %esi, %ecx312; FASTISEL-X64-NEXT:    movl %edi, %eax313; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx314; FASTISEL-X64-NEXT:    shrl %cl, %eax315; FASTISEL-X64-NEXT:    retq316;317; GISEL-X64-LABEL: lshr_i32:318; GISEL-X64:       ## %bb.0:319; GISEL-X64-NEXT:    movl %edi, %eax320; GISEL-X64-NEXT:    movl %esi, %ecx321; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx322; GISEL-X64-NEXT:    shrl %cl, %eax323; GISEL-X64-NEXT:    retq324  %c = lshr i32 %a, %b325  ret i32 %c326}327 328define i64 @lshr_i64(i64 %a, i64 %b) nounwind {329; SDAG-X86-LABEL: lshr_i64:330; SDAG-X86:       ## %bb.0:331; SDAG-X86-NEXT:    pushl %esi332; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx333; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax334; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi335; SDAG-X86-NEXT:    movl %esi, %edx336; SDAG-X86-NEXT:    shrl %cl, %edx337; SDAG-X86-NEXT:    shrdl %cl, %esi, %eax338; SDAG-X86-NEXT:    testb $32, %cl339; SDAG-X86-NEXT:    je LBB7_2340; SDAG-X86-NEXT:  ## %bb.1:341; SDAG-X86-NEXT:    movl %edx, %eax342; SDAG-X86-NEXT:    xorl %edx, %edx343; SDAG-X86-NEXT:  LBB7_2:344; SDAG-X86-NEXT:    popl %esi345; SDAG-X86-NEXT:    retl346;347; FASTISEL-X86-LABEL: lshr_i64:348; FASTISEL-X86:       ## %bb.0:349; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx350; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx351; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax352; FASTISEL-X86-NEXT:    shrdl %cl, %edx, %eax353; FASTISEL-X86-NEXT:    shrl %cl, %edx354; FASTISEL-X86-NEXT:    testb $32, %cl355; FASTISEL-X86-NEXT:    je LBB7_2356; FASTISEL-X86-NEXT:  ## %bb.1:357; FASTISEL-X86-NEXT:    movl %edx, %eax358; FASTISEL-X86-NEXT:    xorl %edx, %edx359; FASTISEL-X86-NEXT:  LBB7_2:360; FASTISEL-X86-NEXT:    retl361;362; SDAG-X64-LABEL: lshr_i64:363; SDAG-X64:       ## %bb.0:364; SDAG-X64-NEXT:    movq %rsi, %rcx365; SDAG-X64-NEXT:    movq %rdi, %rax366; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx367; SDAG-X64-NEXT:    shrq %cl, %rax368; SDAG-X64-NEXT:    retq369;370; FASTISEL-X64-LABEL: lshr_i64:371; FASTISEL-X64:       ## %bb.0:372; FASTISEL-X64-NEXT:    movq %rsi, %rcx373; FASTISEL-X64-NEXT:    movq %rdi, %rax374; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx375; FASTISEL-X64-NEXT:    shrq %cl, %rax376; FASTISEL-X64-NEXT:    retq377;378; GISEL-X64-LABEL: lshr_i64:379; GISEL-X64:       ## %bb.0:380; GISEL-X64-NEXT:    movq %rdi, %rax381; GISEL-X64-NEXT:    movq %rsi, %rcx382; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx383; GISEL-X64-NEXT:    shrq %cl, %rax384; GISEL-X64-NEXT:    retq385  %c = lshr i64 %a, %b386  ret i64 %c387}388 389define i8 @ashr_i8(i8 %a, i8 %b) {390; X86-LABEL: ashr_i8:391; X86:       ## %bb.0:392; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx393; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax394; X86-NEXT:    sarb %cl, %al395; X86-NEXT:    retl396;397; SDAG-X64-LABEL: ashr_i8:398; SDAG-X64:       ## %bb.0:399; SDAG-X64-NEXT:    movl %esi, %ecx400; SDAG-X64-NEXT:    movl %edi, %eax401; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx402; SDAG-X64-NEXT:    sarb %cl, %al403; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax404; SDAG-X64-NEXT:    retq405;406; FASTISEL-X64-LABEL: ashr_i8:407; FASTISEL-X64:       ## %bb.0:408; FASTISEL-X64-NEXT:    movl %esi, %ecx409; FASTISEL-X64-NEXT:    movl %edi, %eax410; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx411; FASTISEL-X64-NEXT:    sarb %cl, %al412; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax413; FASTISEL-X64-NEXT:    retq414;415; GISEL-X64-LABEL: ashr_i8:416; GISEL-X64:       ## %bb.0:417; GISEL-X64-NEXT:    movl %edi, %eax418; GISEL-X64-NEXT:    movl %esi, %ecx419; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx420; GISEL-X64-NEXT:    sarb %cl, %al421; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax422; GISEL-X64-NEXT:    retq423  %c = ashr i8 %a, %b424  ret i8 %c425}426 427define i16 @ashr_i16(i16 %a, i16 %b) {428; SDAG-X86-LABEL: ashr_i16:429; SDAG-X86:       ## %bb.0:430; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx431; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax432; SDAG-X86-NEXT:    sarl %cl, %eax433; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax434; SDAG-X86-NEXT:    retl435;436; FASTISEL-X86-LABEL: ashr_i16:437; FASTISEL-X86:       ## %bb.0:438; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx439; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax440; FASTISEL-X86-NEXT:    ## kill: def $cl killed $cx441; FASTISEL-X86-NEXT:    sarw %cl, %ax442; FASTISEL-X86-NEXT:    retl443;444; SDAG-X64-LABEL: ashr_i16:445; SDAG-X64:       ## %bb.0:446; SDAG-X64-NEXT:    movl %esi, %ecx447; SDAG-X64-NEXT:    movswl %di, %eax448; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx449; SDAG-X64-NEXT:    sarl %cl, %eax450; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax451; SDAG-X64-NEXT:    retq452;453; FASTISEL-X64-LABEL: ashr_i16:454; FASTISEL-X64:       ## %bb.0:455; FASTISEL-X64-NEXT:    movl %esi, %ecx456; FASTISEL-X64-NEXT:    movl %edi, %eax457; FASTISEL-X64-NEXT:    ## kill: def $cx killed $cx killed $ecx458; FASTISEL-X64-NEXT:    ## kill: def $cl killed $cx459; FASTISEL-X64-NEXT:    sarw %cl, %ax460; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax461; FASTISEL-X64-NEXT:    retq462;463; GISEL-X64-LABEL: ashr_i16:464; GISEL-X64:       ## %bb.0:465; GISEL-X64-NEXT:    movl %edi, %eax466; GISEL-X64-NEXT:    movl %esi, %ecx467; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx468; GISEL-X64-NEXT:    sarw %cl, %ax469; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax470; GISEL-X64-NEXT:    retq471  %c = ashr i16 %a, %b472  ret i16 %c473}474 475define i32 @ashr_i32(i32 %a, i32 %b) {476; SDAG-X86-LABEL: ashr_i32:477; SDAG-X86:       ## %bb.0:478; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx479; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax480; SDAG-X86-NEXT:    sarl %cl, %eax481; SDAG-X86-NEXT:    retl482;483; FASTISEL-X86-LABEL: ashr_i32:484; FASTISEL-X86:       ## %bb.0:485; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx486; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax487; FASTISEL-X86-NEXT:    ## kill: def $cl killed $ecx488; FASTISEL-X86-NEXT:    sarl %cl, %eax489; FASTISEL-X86-NEXT:    retl490;491; SDAG-X64-LABEL: ashr_i32:492; SDAG-X64:       ## %bb.0:493; SDAG-X64-NEXT:    movl %esi, %ecx494; SDAG-X64-NEXT:    movl %edi, %eax495; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx496; SDAG-X64-NEXT:    sarl %cl, %eax497; SDAG-X64-NEXT:    retq498;499; FASTISEL-X64-LABEL: ashr_i32:500; FASTISEL-X64:       ## %bb.0:501; FASTISEL-X64-NEXT:    movl %esi, %ecx502; FASTISEL-X64-NEXT:    movl %edi, %eax503; FASTISEL-X64-NEXT:    ## kill: def $cl killed $ecx504; FASTISEL-X64-NEXT:    sarl %cl, %eax505; FASTISEL-X64-NEXT:    retq506;507; GISEL-X64-LABEL: ashr_i32:508; GISEL-X64:       ## %bb.0:509; GISEL-X64-NEXT:    movl %edi, %eax510; GISEL-X64-NEXT:    movl %esi, %ecx511; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $ecx512; GISEL-X64-NEXT:    sarl %cl, %eax513; GISEL-X64-NEXT:    retq514  %c = ashr i32 %a, %b515  ret i32 %c516}517 518define i64 @ashr_i64(i64 %a, i64 %b) nounwind {519; SDAG-X86-LABEL: ashr_i64:520; SDAG-X86:       ## %bb.0:521; SDAG-X86-NEXT:    pushl %esi522; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx523; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax524; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi525; SDAG-X86-NEXT:    movl %esi, %edx526; SDAG-X86-NEXT:    sarl %cl, %edx527; SDAG-X86-NEXT:    shrdl %cl, %esi, %eax528; SDAG-X86-NEXT:    testb $32, %cl529; SDAG-X86-NEXT:    je LBB11_2530; SDAG-X86-NEXT:  ## %bb.1:531; SDAG-X86-NEXT:    sarl $31, %esi532; SDAG-X86-NEXT:    movl %edx, %eax533; SDAG-X86-NEXT:    movl %esi, %edx534; SDAG-X86-NEXT:  LBB11_2:535; SDAG-X86-NEXT:    popl %esi536; SDAG-X86-NEXT:    retl537;538; FASTISEL-X86-LABEL: ashr_i64:539; FASTISEL-X86:       ## %bb.0:540; FASTISEL-X86-NEXT:    pushl %esi541; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx542; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %esi543; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax544; FASTISEL-X86-NEXT:    shrdl %cl, %esi, %eax545; FASTISEL-X86-NEXT:    movl %esi, %edx546; FASTISEL-X86-NEXT:    sarl %cl, %edx547; FASTISEL-X86-NEXT:    testb $32, %cl548; FASTISEL-X86-NEXT:    je LBB11_2549; FASTISEL-X86-NEXT:  ## %bb.1:550; FASTISEL-X86-NEXT:    sarl $31, %esi551; FASTISEL-X86-NEXT:    movl %edx, %eax552; FASTISEL-X86-NEXT:    movl %esi, %edx553; FASTISEL-X86-NEXT:  LBB11_2:554; FASTISEL-X86-NEXT:    popl %esi555; FASTISEL-X86-NEXT:    retl556;557; SDAG-X64-LABEL: ashr_i64:558; SDAG-X64:       ## %bb.0:559; SDAG-X64-NEXT:    movq %rsi, %rcx560; SDAG-X64-NEXT:    movq %rdi, %rax561; SDAG-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx562; SDAG-X64-NEXT:    sarq %cl, %rax563; SDAG-X64-NEXT:    retq564;565; FASTISEL-X64-LABEL: ashr_i64:566; FASTISEL-X64:       ## %bb.0:567; FASTISEL-X64-NEXT:    movq %rsi, %rcx568; FASTISEL-X64-NEXT:    movq %rdi, %rax569; FASTISEL-X64-NEXT:    ## kill: def $cl killed $rcx570; FASTISEL-X64-NEXT:    sarq %cl, %rax571; FASTISEL-X64-NEXT:    retq572;573; GISEL-X64-LABEL: ashr_i64:574; GISEL-X64:       ## %bb.0:575; GISEL-X64-NEXT:    movq %rdi, %rax576; GISEL-X64-NEXT:    movq %rsi, %rcx577; GISEL-X64-NEXT:    ## kill: def $cl killed $cl killed $rcx578; GISEL-X64-NEXT:    sarq %cl, %rax579; GISEL-X64-NEXT:    retq580  %c = ashr i64 %a, %b581  ret i64 %c582}583 584define i8 @shl_imm1_i8(i8 %a) {585; SDAG-X86-LABEL: shl_imm1_i8:586; SDAG-X86:       ## %bb.0:587; SDAG-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax588; SDAG-X86-NEXT:    addb %al, %al589; SDAG-X86-NEXT:    retl590;591; FASTISEL-X86-LABEL: shl_imm1_i8:592; FASTISEL-X86:       ## %bb.0:593; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax594; FASTISEL-X86-NEXT:    shlb %al595; FASTISEL-X86-NEXT:    retl596;597; SDAG-X64-LABEL: shl_imm1_i8:598; SDAG-X64:       ## %bb.0:599; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi600; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax601; SDAG-X64-NEXT:    ## kill: def $al killed $al killed $eax602; SDAG-X64-NEXT:    retq603;604; FASTISEL-X64-LABEL: shl_imm1_i8:605; FASTISEL-X64:       ## %bb.0:606; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi607; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax608; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax609; FASTISEL-X64-NEXT:    retq610;611; GISEL-X64-LABEL: shl_imm1_i8:612; GISEL-X64:       ## %bb.0:613; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi614; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax615; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax616; GISEL-X64-NEXT:    retq617  %c = shl i8 %a, 1618  ret i8 %c619}620 621define i16 @shl_imm1_i16(i16 %a) {622; SDAG-X86-LABEL: shl_imm1_i16:623; SDAG-X86:       ## %bb.0:624; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax625; SDAG-X86-NEXT:    addl %eax, %eax626; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax627; SDAG-X86-NEXT:    retl628;629; FASTISEL-X86-LABEL: shl_imm1_i16:630; FASTISEL-X86:       ## %bb.0:631; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax632; FASTISEL-X86-NEXT:    shlw %ax633; FASTISEL-X86-NEXT:    retl634;635; SDAG-X64-LABEL: shl_imm1_i16:636; SDAG-X64:       ## %bb.0:637; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi638; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax639; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax640; SDAG-X64-NEXT:    retq641;642; FASTISEL-X64-LABEL: shl_imm1_i16:643; FASTISEL-X64:       ## %bb.0:644; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi645; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax646; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax647; FASTISEL-X64-NEXT:    retq648;649; GISEL-X64-LABEL: shl_imm1_i16:650; GISEL-X64:       ## %bb.0:651; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi652; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax653; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax654; GISEL-X64-NEXT:    retq655  %c = shl i16 %a, 1656  ret i16 %c657}658 659define i32 @shl_imm1_i32(i32 %a) {660; SDAG-X86-LABEL: shl_imm1_i32:661; SDAG-X86:       ## %bb.0:662; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax663; SDAG-X86-NEXT:    addl %eax, %eax664; SDAG-X86-NEXT:    retl665;666; FASTISEL-X86-LABEL: shl_imm1_i32:667; FASTISEL-X86:       ## %bb.0:668; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax669; FASTISEL-X86-NEXT:    shll %eax670; FASTISEL-X86-NEXT:    retl671;672; SDAG-X64-LABEL: shl_imm1_i32:673; SDAG-X64:       ## %bb.0:674; SDAG-X64-NEXT:    ## kill: def $edi killed $edi def $rdi675; SDAG-X64-NEXT:    leal (%rdi,%rdi), %eax676; SDAG-X64-NEXT:    retq677;678; FASTISEL-X64-LABEL: shl_imm1_i32:679; FASTISEL-X64:       ## %bb.0:680; FASTISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi681; FASTISEL-X64-NEXT:    leal (,%rdi,2), %eax682; FASTISEL-X64-NEXT:    retq683;684; GISEL-X64-LABEL: shl_imm1_i32:685; GISEL-X64:       ## %bb.0:686; GISEL-X64-NEXT:    ## kill: def $edi killed $edi def $rdi687; GISEL-X64-NEXT:    leal (%rdi,%rdi), %eax688; GISEL-X64-NEXT:    retq689  %c = shl i32 %a, 1690  ret i32 %c691}692 693define i64 @shl_imm1_i64(i64 %a) {694; SDAG-X86-LABEL: shl_imm1_i64:695; SDAG-X86:       ## %bb.0:696; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax697; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx698; SDAG-X86-NEXT:    shldl $1, %eax, %edx699; SDAG-X86-NEXT:    addl %eax, %eax700; SDAG-X86-NEXT:    retl701;702; FASTISEL-X86-LABEL: shl_imm1_i64:703; FASTISEL-X86:       ## %bb.0:704; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx705; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax706; FASTISEL-X86-NEXT:    shldl $1, %eax, %edx707; FASTISEL-X86-NEXT:    addl %eax, %eax708; FASTISEL-X86-NEXT:    retl709;710; SDAG-X64-LABEL: shl_imm1_i64:711; SDAG-X64:       ## %bb.0:712; SDAG-X64-NEXT:    leaq (%rdi,%rdi), %rax713; SDAG-X64-NEXT:    retq714;715; FASTISEL-X64-LABEL: shl_imm1_i64:716; FASTISEL-X64:       ## %bb.0:717; FASTISEL-X64-NEXT:    leaq (,%rdi,2), %rax718; FASTISEL-X64-NEXT:    retq719;720; GISEL-X64-LABEL: shl_imm1_i64:721; GISEL-X64:       ## %bb.0:722; GISEL-X64-NEXT:    leaq (%rdi,%rdi), %rax723; GISEL-X64-NEXT:    retq724  %c = shl i64 %a, 1725  ret i64 %c726}727 728define i8 @lshr_imm1_i8(i8 %a) {729; X86-LABEL: lshr_imm1_i8:730; X86:       ## %bb.0:731; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax732; X86-NEXT:    shrb %al733; X86-NEXT:    retl734;735; X64-LABEL: lshr_imm1_i8:736; X64:       ## %bb.0:737; X64-NEXT:    movl %edi, %eax738; X64-NEXT:    shrb %al739; X64-NEXT:    ## kill: def $al killed $al killed $eax740; X64-NEXT:    retq741  %c = lshr i8 %a, 1742  ret i8 %c743}744 745define i16 @lshr_imm1_i16(i16 %a) {746; SDAG-X86-LABEL: lshr_imm1_i16:747; SDAG-X86:       ## %bb.0:748; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax749; SDAG-X86-NEXT:    shrl %eax750; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax751; SDAG-X86-NEXT:    retl752;753; FASTISEL-X86-LABEL: lshr_imm1_i16:754; FASTISEL-X86:       ## %bb.0:755; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax756; FASTISEL-X86-NEXT:    shrw %ax757; FASTISEL-X86-NEXT:    retl758;759; SDAG-X64-LABEL: lshr_imm1_i16:760; SDAG-X64:       ## %bb.0:761; SDAG-X64-NEXT:    movzwl %di, %eax762; SDAG-X64-NEXT:    shrl %eax763; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax764; SDAG-X64-NEXT:    retq765;766; FASTISEL-X64-LABEL: lshr_imm1_i16:767; FASTISEL-X64:       ## %bb.0:768; FASTISEL-X64-NEXT:    movl %edi, %eax769; FASTISEL-X64-NEXT:    shrw %ax770; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax771; FASTISEL-X64-NEXT:    retq772;773; GISEL-X64-LABEL: lshr_imm1_i16:774; GISEL-X64:       ## %bb.0:775; GISEL-X64-NEXT:    movl %edi, %eax776; GISEL-X64-NEXT:    shrw %ax777; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax778; GISEL-X64-NEXT:    retq779  %c = lshr i16 %a, 1780  ret i16 %c781}782 783define i32 @lshr_imm1_i32(i32 %a) {784; X86-LABEL: lshr_imm1_i32:785; X86:       ## %bb.0:786; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax787; X86-NEXT:    shrl %eax788; X86-NEXT:    retl789;790; X64-LABEL: lshr_imm1_i32:791; X64:       ## %bb.0:792; X64-NEXT:    movl %edi, %eax793; X64-NEXT:    shrl %eax794; X64-NEXT:    retq795  %c = lshr i32 %a, 1796  ret i32 %c797}798 799define i64 @lshr_imm1_i64(i64 %a) {800; SDAG-X86-LABEL: lshr_imm1_i64:801; SDAG-X86:       ## %bb.0:802; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax803; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx804; SDAG-X86-NEXT:    shrdl $1, %edx, %eax805; SDAG-X86-NEXT:    shrl %edx806; SDAG-X86-NEXT:    retl807;808; FASTISEL-X86-LABEL: lshr_imm1_i64:809; FASTISEL-X86:       ## %bb.0:810; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx811; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax812; FASTISEL-X86-NEXT:    shrdl $1, %edx, %eax813; FASTISEL-X86-NEXT:    shrl %edx814; FASTISEL-X86-NEXT:    retl815;816; X64-LABEL: lshr_imm1_i64:817; X64:       ## %bb.0:818; X64-NEXT:    movq %rdi, %rax819; X64-NEXT:    shrq %rax820; X64-NEXT:    retq821  %c = lshr i64 %a, 1822  ret i64 %c823}824 825define i8 @ashr_imm1_i8(i8 %a) {826; X86-LABEL: ashr_imm1_i8:827; X86:       ## %bb.0:828; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax829; X86-NEXT:    sarb %al830; X86-NEXT:    retl831;832; X64-LABEL: ashr_imm1_i8:833; X64:       ## %bb.0:834; X64-NEXT:    movl %edi, %eax835; X64-NEXT:    sarb %al836; X64-NEXT:    ## kill: def $al killed $al killed $eax837; X64-NEXT:    retq838  %c = ashr i8 %a, 1839  ret i8 %c840}841 842define i16 @ashr_imm1_i16(i16 %a) {843; SDAG-X86-LABEL: ashr_imm1_i16:844; SDAG-X86:       ## %bb.0:845; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax846; SDAG-X86-NEXT:    shrl %eax847; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax848; SDAG-X86-NEXT:    retl849;850; FASTISEL-X86-LABEL: ashr_imm1_i16:851; FASTISEL-X86:       ## %bb.0:852; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax853; FASTISEL-X86-NEXT:    sarw %ax854; FASTISEL-X86-NEXT:    retl855;856; SDAG-X64-LABEL: ashr_imm1_i16:857; SDAG-X64:       ## %bb.0:858; SDAG-X64-NEXT:    movswl %di, %eax859; SDAG-X64-NEXT:    shrl %eax860; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax861; SDAG-X64-NEXT:    retq862;863; FASTISEL-X64-LABEL: ashr_imm1_i16:864; FASTISEL-X64:       ## %bb.0:865; FASTISEL-X64-NEXT:    movl %edi, %eax866; FASTISEL-X64-NEXT:    sarw %ax867; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax868; FASTISEL-X64-NEXT:    retq869;870; GISEL-X64-LABEL: ashr_imm1_i16:871; GISEL-X64:       ## %bb.0:872; GISEL-X64-NEXT:    movl %edi, %eax873; GISEL-X64-NEXT:    sarw %ax874; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax875; GISEL-X64-NEXT:    retq876  %c = ashr i16 %a, 1877  ret i16 %c878}879 880define i32 @ashr_imm1_i32(i32 %a) {881; X86-LABEL: ashr_imm1_i32:882; X86:       ## %bb.0:883; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax884; X86-NEXT:    sarl %eax885; X86-NEXT:    retl886;887; X64-LABEL: ashr_imm1_i32:888; X64:       ## %bb.0:889; X64-NEXT:    movl %edi, %eax890; X64-NEXT:    sarl %eax891; X64-NEXT:    retq892  %c = ashr i32 %a, 1893  ret i32 %c894}895 896define i64 @ashr_imm1_i64(i64 %a) {897; SDAG-X86-LABEL: ashr_imm1_i64:898; SDAG-X86:       ## %bb.0:899; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax900; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx901; SDAG-X86-NEXT:    shrdl $1, %edx, %eax902; SDAG-X86-NEXT:    sarl %edx903; SDAG-X86-NEXT:    retl904;905; FASTISEL-X86-LABEL: ashr_imm1_i64:906; FASTISEL-X86:       ## %bb.0:907; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx908; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax909; FASTISEL-X86-NEXT:    shrdl $1, %edx, %eax910; FASTISEL-X86-NEXT:    sarl %edx911; FASTISEL-X86-NEXT:    retl912;913; X64-LABEL: ashr_imm1_i64:914; X64:       ## %bb.0:915; X64-NEXT:    movq %rdi, %rax916; X64-NEXT:    sarq %rax917; X64-NEXT:    retq918  %c = ashr i64 %a, 1919  ret i64 %c920}921 922define i8 @shl_imm4_i8(i8 %a) {923; X86-LABEL: shl_imm4_i8:924; X86:       ## %bb.0:925; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax926; X86-NEXT:    shlb $4, %al927; X86-NEXT:    retl928;929; X64-LABEL: shl_imm4_i8:930; X64:       ## %bb.0:931; X64-NEXT:    movl %edi, %eax932; X64-NEXT:    shlb $4, %al933; X64-NEXT:    ## kill: def $al killed $al killed $eax934; X64-NEXT:    retq935  %c = shl i8 %a, 4936  ret i8 %c937}938 939define i16 @shl_imm4_i16(i16 %a) {940; SDAG-X86-LABEL: shl_imm4_i16:941; SDAG-X86:       ## %bb.0:942; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax943; SDAG-X86-NEXT:    shll $4, %eax944; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax945; SDAG-X86-NEXT:    retl946;947; FASTISEL-X86-LABEL: shl_imm4_i16:948; FASTISEL-X86:       ## %bb.0:949; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax950; FASTISEL-X86-NEXT:    shlw $4, %ax951; FASTISEL-X86-NEXT:    retl952;953; SDAG-X64-LABEL: shl_imm4_i16:954; SDAG-X64:       ## %bb.0:955; SDAG-X64-NEXT:    movl %edi, %eax956; SDAG-X64-NEXT:    shll $4, %eax957; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax958; SDAG-X64-NEXT:    retq959;960; FASTISEL-X64-LABEL: shl_imm4_i16:961; FASTISEL-X64:       ## %bb.0:962; FASTISEL-X64-NEXT:    movl %edi, %eax963; FASTISEL-X64-NEXT:    shlw $4, %ax964; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax965; FASTISEL-X64-NEXT:    retq966;967; GISEL-X64-LABEL: shl_imm4_i16:968; GISEL-X64:       ## %bb.0:969; GISEL-X64-NEXT:    movl %edi, %eax970; GISEL-X64-NEXT:    shlw $4, %ax971; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax972; GISEL-X64-NEXT:    retq973  %c = shl i16 %a, 4974  ret i16 %c975}976 977define i32 @shl_imm4_i32(i32 %a) {978; X86-LABEL: shl_imm4_i32:979; X86:       ## %bb.0:980; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax981; X86-NEXT:    shll $4, %eax982; X86-NEXT:    retl983;984; X64-LABEL: shl_imm4_i32:985; X64:       ## %bb.0:986; X64-NEXT:    movl %edi, %eax987; X64-NEXT:    shll $4, %eax988; X64-NEXT:    retq989  %c = shl i32 %a, 4990  ret i32 %c991}992 993define i64 @shl_imm4_i64(i64 %a) {994; SDAG-X86-LABEL: shl_imm4_i64:995; SDAG-X86:       ## %bb.0:996; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax997; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx998; SDAG-X86-NEXT:    shldl $4, %eax, %edx999; SDAG-X86-NEXT:    shll $4, %eax1000; SDAG-X86-NEXT:    retl1001;1002; FASTISEL-X86-LABEL: shl_imm4_i64:1003; FASTISEL-X86:       ## %bb.0:1004; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1005; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1006; FASTISEL-X86-NEXT:    shldl $4, %eax, %edx1007; FASTISEL-X86-NEXT:    shll $4, %eax1008; FASTISEL-X86-NEXT:    retl1009;1010; X64-LABEL: shl_imm4_i64:1011; X64:       ## %bb.0:1012; X64-NEXT:    movq %rdi, %rax1013; X64-NEXT:    shlq $4, %rax1014; X64-NEXT:    retq1015  %c = shl i64 %a, 41016  ret i64 %c1017}1018 1019define i8 @lshr_imm4_i8(i8 %a) {1020; X86-LABEL: lshr_imm4_i8:1021; X86:       ## %bb.0:1022; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax1023; X86-NEXT:    shrb $4, %al1024; X86-NEXT:    retl1025;1026; X64-LABEL: lshr_imm4_i8:1027; X64:       ## %bb.0:1028; X64-NEXT:    movl %edi, %eax1029; X64-NEXT:    shrb $4, %al1030; X64-NEXT:    ## kill: def $al killed $al killed $eax1031; X64-NEXT:    retq1032  %c = lshr i8 %a, 41033  ret i8 %c1034}1035 1036define i16 @lshr_imm4_i16(i16 %a) {1037; SDAG-X86-LABEL: lshr_imm4_i16:1038; SDAG-X86:       ## %bb.0:1039; SDAG-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1040; SDAG-X86-NEXT:    shrl $4, %eax1041; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax1042; SDAG-X86-NEXT:    retl1043;1044; FASTISEL-X86-LABEL: lshr_imm4_i16:1045; FASTISEL-X86:       ## %bb.0:1046; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1047; FASTISEL-X86-NEXT:    shrw $4, %ax1048; FASTISEL-X86-NEXT:    retl1049;1050; SDAG-X64-LABEL: lshr_imm4_i16:1051; SDAG-X64:       ## %bb.0:1052; SDAG-X64-NEXT:    movzwl %di, %eax1053; SDAG-X64-NEXT:    shrl $4, %eax1054; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1055; SDAG-X64-NEXT:    retq1056;1057; FASTISEL-X64-LABEL: lshr_imm4_i16:1058; FASTISEL-X64:       ## %bb.0:1059; FASTISEL-X64-NEXT:    movl %edi, %eax1060; FASTISEL-X64-NEXT:    shrw $4, %ax1061; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1062; FASTISEL-X64-NEXT:    retq1063;1064; GISEL-X64-LABEL: lshr_imm4_i16:1065; GISEL-X64:       ## %bb.0:1066; GISEL-X64-NEXT:    movl %edi, %eax1067; GISEL-X64-NEXT:    shrw $4, %ax1068; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1069; GISEL-X64-NEXT:    retq1070  %c = lshr i16 %a, 41071  ret i16 %c1072}1073 1074define i32 @lshr_imm4_i32(i32 %a) {1075; X86-LABEL: lshr_imm4_i32:1076; X86:       ## %bb.0:1077; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1078; X86-NEXT:    shrl $4, %eax1079; X86-NEXT:    retl1080;1081; X64-LABEL: lshr_imm4_i32:1082; X64:       ## %bb.0:1083; X64-NEXT:    movl %edi, %eax1084; X64-NEXT:    shrl $4, %eax1085; X64-NEXT:    retq1086  %c = lshr i32 %a, 41087  ret i32 %c1088}1089 1090define i64 @lshr_imm4_i64(i64 %a) {1091; SDAG-X86-LABEL: lshr_imm4_i64:1092; SDAG-X86:       ## %bb.0:1093; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1094; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1095; SDAG-X86-NEXT:    shrdl $4, %edx, %eax1096; SDAG-X86-NEXT:    shrl $4, %edx1097; SDAG-X86-NEXT:    retl1098;1099; FASTISEL-X86-LABEL: lshr_imm4_i64:1100; FASTISEL-X86:       ## %bb.0:1101; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1102; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1103; FASTISEL-X86-NEXT:    shrdl $4, %edx, %eax1104; FASTISEL-X86-NEXT:    shrl $4, %edx1105; FASTISEL-X86-NEXT:    retl1106;1107; X64-LABEL: lshr_imm4_i64:1108; X64:       ## %bb.0:1109; X64-NEXT:    movq %rdi, %rax1110; X64-NEXT:    shrq $4, %rax1111; X64-NEXT:    retq1112  %c = lshr i64 %a, 41113  ret i64 %c1114}1115 1116define i8 @ashr_imm4_i8(i8 %a) {1117; X86-LABEL: ashr_imm4_i8:1118; X86:       ## %bb.0:1119; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax1120; X86-NEXT:    sarb $4, %al1121; X86-NEXT:    retl1122;1123; X64-LABEL: ashr_imm4_i8:1124; X64:       ## %bb.0:1125; X64-NEXT:    movl %edi, %eax1126; X64-NEXT:    sarb $4, %al1127; X64-NEXT:    ## kill: def $al killed $al killed $eax1128; X64-NEXT:    retq1129  %c = ashr i8 %a, 41130  ret i8 %c1131}1132 1133define i16 @ashr_imm4_i16(i16 %a) {1134; SDAG-X86-LABEL: ashr_imm4_i16:1135; SDAG-X86:       ## %bb.0:1136; SDAG-X86-NEXT:    movswl {{[0-9]+}}(%esp), %eax1137; SDAG-X86-NEXT:    shrl $4, %eax1138; SDAG-X86-NEXT:    ## kill: def $ax killed $ax killed $eax1139; SDAG-X86-NEXT:    retl1140;1141; FASTISEL-X86-LABEL: ashr_imm4_i16:1142; FASTISEL-X86:       ## %bb.0:1143; FASTISEL-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1144; FASTISEL-X86-NEXT:    sarw $4, %ax1145; FASTISEL-X86-NEXT:    retl1146;1147; SDAG-X64-LABEL: ashr_imm4_i16:1148; SDAG-X64:       ## %bb.0:1149; SDAG-X64-NEXT:    movswl %di, %eax1150; SDAG-X64-NEXT:    shrl $4, %eax1151; SDAG-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1152; SDAG-X64-NEXT:    retq1153;1154; FASTISEL-X64-LABEL: ashr_imm4_i16:1155; FASTISEL-X64:       ## %bb.0:1156; FASTISEL-X64-NEXT:    movl %edi, %eax1157; FASTISEL-X64-NEXT:    sarw $4, %ax1158; FASTISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1159; FASTISEL-X64-NEXT:    retq1160;1161; GISEL-X64-LABEL: ashr_imm4_i16:1162; GISEL-X64:       ## %bb.0:1163; GISEL-X64-NEXT:    movl %edi, %eax1164; GISEL-X64-NEXT:    sarw $4, %ax1165; GISEL-X64-NEXT:    ## kill: def $ax killed $ax killed $eax1166; GISEL-X64-NEXT:    retq1167  %c = ashr i16 %a, 41168  ret i16 %c1169}1170 1171define i32 @ashr_imm4_i32(i32 %a) {1172; X86-LABEL: ashr_imm4_i32:1173; X86:       ## %bb.0:1174; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1175; X86-NEXT:    sarl $4, %eax1176; X86-NEXT:    retl1177;1178; X64-LABEL: ashr_imm4_i32:1179; X64:       ## %bb.0:1180; X64-NEXT:    movl %edi, %eax1181; X64-NEXT:    sarl $4, %eax1182; X64-NEXT:    retq1183  %c = ashr i32 %a, 41184  ret i32 %c1185}1186 1187define i64 @ashr_imm4_i64(i64 %a) {1188; SDAG-X86-LABEL: ashr_imm4_i64:1189; SDAG-X86:       ## %bb.0:1190; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1191; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1192; SDAG-X86-NEXT:    shrdl $4, %edx, %eax1193; SDAG-X86-NEXT:    sarl $4, %edx1194; SDAG-X86-NEXT:    retl1195;1196; FASTISEL-X86-LABEL: ashr_imm4_i64:1197; FASTISEL-X86:       ## %bb.0:1198; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %edx1199; FASTISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1200; FASTISEL-X86-NEXT:    shrdl $4, %edx, %eax1201; FASTISEL-X86-NEXT:    sarl $4, %edx1202; FASTISEL-X86-NEXT:    retl1203;1204; X64-LABEL: ashr_imm4_i64:1205; X64:       ## %bb.0:1206; X64-NEXT:    movq %rdi, %rax1207; X64-NEXT:    sarq $4, %rax1208; X64-NEXT:    retq1209  %c = ashr i64 %a, 41210  ret i64 %c1211}1212 1213define i8 @PR36731(i8 %a) {1214; SDAG-LABEL: PR36731:1215; SDAG:       ## %bb.0:1216; SDAG-NEXT:    ret{{[l|q]}}1217;1218; FASTISEL-X86-LABEL: PR36731:1219; FASTISEL-X86:       ## %bb.0:1220; FASTISEL-X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax1221; FASTISEL-X86-NEXT:    movb $255, %cl1222; FASTISEL-X86-NEXT:    shlb %cl, %al1223; FASTISEL-X86-NEXT:    retl1224;1225; FASTISEL-X64-LABEL: PR36731:1226; FASTISEL-X64:       ## %bb.0:1227; FASTISEL-X64-NEXT:    movl %edi, %eax1228; FASTISEL-X64-NEXT:    movb $255, %cl1229; FASTISEL-X64-NEXT:    shlb %cl, %al1230; FASTISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax1231; FASTISEL-X64-NEXT:    retq1232;1233; GISEL-X64-LABEL: PR36731:1234; GISEL-X64:       ## %bb.0:1235; GISEL-X64-NEXT:    movl %edi, %eax1236; GISEL-X64-NEXT:    shlb $255, %al1237; GISEL-X64-NEXT:    ## kill: def $al killed $al killed $eax1238; GISEL-X64-NEXT:    retq1239  %b = shl i8 %a, -11240  ret i8 %b1241}1242