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