278 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefix=CMOV3; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-cmov | FileCheck %s --check-prefix=NO_CMOV4 5define i16 @cmov_zpromotion_8_to_16(i1 %c) {6; CMOV-LABEL: cmov_zpromotion_8_to_16:7; CMOV: # %bb.0:8; CMOV-NEXT: testb $1, %dil9; CMOV-NEXT: movl $117, %ecx10; CMOV-NEXT: movl $237, %eax11; CMOV-NEXT: cmovnel %ecx, %eax12; CMOV-NEXT: # kill: def $ax killed $ax killed $eax13; CMOV-NEXT: retq14;15; NO_CMOV-LABEL: cmov_zpromotion_8_to_16:16; NO_CMOV: # %bb.0:17; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax18; NO_CMOV-NEXT: andl $1, %eax19; NO_CMOV-NEXT: negl %eax20; NO_CMOV-NEXT: andl $152, %eax21; NO_CMOV-NEXT: xorl $237, %eax22; NO_CMOV-NEXT: # kill: def $ax killed $ax killed $eax23; NO_CMOV-NEXT: retl24 %t0 = select i1 %c, i8 117, i8 -1925 %ret = zext i8 %t0 to i1626 ret i16 %ret27}28 29define i32 @cmov_zpromotion_8_to_32(i1 %c) {30; CMOV-LABEL: cmov_zpromotion_8_to_32:31; CMOV: # %bb.0:32; CMOV-NEXT: testb $1, %dil33; CMOV-NEXT: movl $126, %ecx34; CMOV-NEXT: movl $255, %eax35; CMOV-NEXT: cmovnel %ecx, %eax36; CMOV-NEXT: retq37;38; NO_CMOV-LABEL: cmov_zpromotion_8_to_32:39; NO_CMOV: # %bb.0:40; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax41; NO_CMOV-NEXT: andl $1, %eax42; NO_CMOV-NEXT: negl %eax43; NO_CMOV-NEXT: andl $129, %eax44; NO_CMOV-NEXT: xorl $255, %eax45; NO_CMOV-NEXT: retl46 %t0 = select i1 %c, i8 12414, i8 -147 %ret = zext i8 %t0 to i3248 ret i32 %ret49}50 51define i64 @cmov_zpromotion_8_to_64(i1 %c) {52; CMOV-LABEL: cmov_zpromotion_8_to_64:53; CMOV: # %bb.0:54; CMOV-NEXT: testb $1, %dil55; CMOV-NEXT: movl $126, %ecx56; CMOV-NEXT: movl $255, %eax57; CMOV-NEXT: cmovneq %rcx, %rax58; CMOV-NEXT: retq59;60; NO_CMOV-LABEL: cmov_zpromotion_8_to_64:61; NO_CMOV: # %bb.0:62; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax63; NO_CMOV-NEXT: andl $1, %eax64; NO_CMOV-NEXT: negl %eax65; NO_CMOV-NEXT: andl $129, %eax66; NO_CMOV-NEXT: xorl $255, %eax67; NO_CMOV-NEXT: xorl %edx, %edx68; NO_CMOV-NEXT: retl69 %t0 = select i1 %c, i8 12414, i8 -170 %ret = zext i8 %t0 to i6471 ret i64 %ret72}73 74define i32 @cmov_zpromotion_16_to_32(i1 %c) {75; CMOV-LABEL: cmov_zpromotion_16_to_32:76; CMOV: # %bb.0:77; CMOV-NEXT: testb $1, %dil78; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E79; CMOV-NEXT: movl $65535, %eax # imm = 0xFFFF80; CMOV-NEXT: cmovnel %ecx, %eax81; CMOV-NEXT: retq82;83; NO_CMOV-LABEL: cmov_zpromotion_16_to_32:84; NO_CMOV: # %bb.0:85; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax86; NO_CMOV-NEXT: andl $1, %eax87; NO_CMOV-NEXT: negl %eax88; NO_CMOV-NEXT: andl $53121, %eax # imm = 0xCF8189; NO_CMOV-NEXT: xorl $65535, %eax # imm = 0xFFFF90; NO_CMOV-NEXT: retl91 %t0 = select i1 %c, i16 12414, i16 -192 %ret = zext i16 %t0 to i3293 ret i32 %ret94}95 96define i64 @cmov_zpromotion_16_to_64(i1 %c) {97; CMOV-LABEL: cmov_zpromotion_16_to_64:98; CMOV: # %bb.0:99; CMOV-NEXT: testb $1, %dil100; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E101; CMOV-NEXT: movl $65535, %eax # imm = 0xFFFF102; CMOV-NEXT: cmovneq %rcx, %rax103; CMOV-NEXT: retq104;105; NO_CMOV-LABEL: cmov_zpromotion_16_to_64:106; NO_CMOV: # %bb.0:107; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax108; NO_CMOV-NEXT: andl $1, %eax109; NO_CMOV-NEXT: negl %eax110; NO_CMOV-NEXT: andl $53121, %eax # imm = 0xCF81111; NO_CMOV-NEXT: xorl $65535, %eax # imm = 0xFFFF112; NO_CMOV-NEXT: xorl %edx, %edx113; NO_CMOV-NEXT: retl114 %t0 = select i1 %c, i16 12414, i16 -1115 %ret = zext i16 %t0 to i64116 ret i64 %ret117}118 119define i64 @cmov_zpromotion_32_to_64(i1 %c) {120; CMOV-LABEL: cmov_zpromotion_32_to_64:121; CMOV: # %bb.0:122; CMOV-NEXT: testb $1, %dil123; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E124; CMOV-NEXT: movl $43107, %eax # imm = 0xA863125; CMOV-NEXT: cmovnel %ecx, %eax126; CMOV-NEXT: retq127;128; NO_CMOV-LABEL: cmov_zpromotion_32_to_64:129; NO_CMOV: # %bb.0:130; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax131; NO_CMOV-NEXT: andl $1, %eax132; NO_CMOV-NEXT: negl %eax133; NO_CMOV-NEXT: andl $38941, %eax # imm = 0x981D134; NO_CMOV-NEXT: xorl $43107, %eax # imm = 0xA863135; NO_CMOV-NEXT: xorl %edx, %edx136; NO_CMOV-NEXT: retl137 %t0 = select i1 %c, i32 12414, i32 43107138 %ret = zext i32 %t0 to i64139 ret i64 %ret140}141 142define i16 @cmov_spromotion_8_to_16(i1 %c) {143; CMOV-LABEL: cmov_spromotion_8_to_16:144; CMOV: # %bb.0:145; CMOV-NEXT: testb $1, %dil146; CMOV-NEXT: movl $117, %ecx147; CMOV-NEXT: movl $65517, %eax # imm = 0xFFED148; CMOV-NEXT: cmovnel %ecx, %eax149; CMOV-NEXT: # kill: def $ax killed $ax killed $eax150; CMOV-NEXT: retq151;152; NO_CMOV-LABEL: cmov_spromotion_8_to_16:153; NO_CMOV: # %bb.0:154; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax155; NO_CMOV-NEXT: andl $1, %eax156; NO_CMOV-NEXT: negl %eax157; NO_CMOV-NEXT: andl $-104, %eax158; NO_CMOV-NEXT: xorl $65517, %eax # imm = 0xFFED159; NO_CMOV-NEXT: # kill: def $ax killed $ax killed $eax160; NO_CMOV-NEXT: retl161 %t0 = select i1 %c, i8 117, i8 -19162 %ret = sext i8 %t0 to i16163 ret i16 %ret164}165 166define i32 @cmov_spromotion_8_to_32(i1 %c) {167; CMOV-LABEL: cmov_spromotion_8_to_32:168; CMOV: # %bb.0:169; CMOV-NEXT: testb $1, %dil170; CMOV-NEXT: movl $126, %ecx171; CMOV-NEXT: movl $99, %eax172; CMOV-NEXT: cmovnel %ecx, %eax173; CMOV-NEXT: retq174;175; NO_CMOV-LABEL: cmov_spromotion_8_to_32:176; NO_CMOV: # %bb.0:177; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax178; NO_CMOV-NEXT: andl $1, %eax179; NO_CMOV-NEXT: negl %eax180; NO_CMOV-NEXT: andl $29, %eax181; NO_CMOV-NEXT: xorl $99, %eax182; NO_CMOV-NEXT: retl183 %t0 = select i1 %c, i8 12414, i8 43107184 %ret = sext i8 %t0 to i32185 ret i32 %ret186}187 188define i64 @cmov_spromotion_8_to_64(i1 %c) {189; CMOV-LABEL: cmov_spromotion_8_to_64:190; CMOV: # %bb.0:191; CMOV-NEXT: testb $1, %dil192; CMOV-NEXT: movl $126, %ecx193; CMOV-NEXT: movl $99, %eax194; CMOV-NEXT: cmovneq %rcx, %rax195; CMOV-NEXT: retq196;197; NO_CMOV-LABEL: cmov_spromotion_8_to_64:198; NO_CMOV: # %bb.0:199; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax200; NO_CMOV-NEXT: andl $1, %eax201; NO_CMOV-NEXT: negl %eax202; NO_CMOV-NEXT: andl $29, %eax203; NO_CMOV-NEXT: xorl $99, %eax204; NO_CMOV-NEXT: xorl %edx, %edx205; NO_CMOV-NEXT: retl206 %t0 = select i1 %c, i8 12414, i8 43107207 %ret = sext i8 %t0 to i64208 ret i64 %ret209}210 211define i32 @cmov_spromotion_16_to_32(i1 %c) {212; CMOV-LABEL: cmov_spromotion_16_to_32:213; CMOV: # %bb.0:214; CMOV-NEXT: testb $1, %dil215; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E216; CMOV-NEXT: movl $-22429, %eax # imm = 0xA863217; CMOV-NEXT: cmovnel %ecx, %eax218; CMOV-NEXT: retq219;220; NO_CMOV-LABEL: cmov_spromotion_16_to_32:221; NO_CMOV: # %bb.0:222; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax223; NO_CMOV-NEXT: andl $1, %eax224; NO_CMOV-NEXT: negl %eax225; NO_CMOV-NEXT: andl $-26595, %eax # imm = 0x981D226; NO_CMOV-NEXT: xorl $-22429, %eax # imm = 0xA863227; NO_CMOV-NEXT: retl228 %t0 = select i1 %c, i16 12414, i16 43107229 %ret = sext i16 %t0 to i32230 ret i32 %ret231}232 233define i64 @cmov_spromotion_16_to_64(i1 %c) {234; CMOV-LABEL: cmov_spromotion_16_to_64:235; CMOV: # %bb.0:236; CMOV-NEXT: testb $1, %dil237; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E238; CMOV-NEXT: movq $-22429, %rax # imm = 0xA863239; CMOV-NEXT: cmovneq %rcx, %rax240; CMOV-NEXT: retq241;242; NO_CMOV-LABEL: cmov_spromotion_16_to_64:243; NO_CMOV: # %bb.0:244; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax245; NO_CMOV-NEXT: andl $1, %eax246; NO_CMOV-NEXT: leal -1(%eax), %edx247; NO_CMOV-NEXT: negl %eax248; NO_CMOV-NEXT: andl $-26595, %eax # imm = 0x981D249; NO_CMOV-NEXT: xorl $-22429, %eax # imm = 0xA863250; NO_CMOV-NEXT: retl251 %t0 = select i1 %c, i16 12414, i16 43107252 %ret = sext i16 %t0 to i64253 ret i64 %ret254}255 256define i64 @cmov_spromotion_32_to_64(i1 %c) {257; CMOV-LABEL: cmov_spromotion_32_to_64:258; CMOV: # %bb.0:259; CMOV-NEXT: testb $1, %dil260; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E261; CMOV-NEXT: movl $43107, %eax # imm = 0xA863262; CMOV-NEXT: cmovneq %rcx, %rax263; CMOV-NEXT: retq264;265; NO_CMOV-LABEL: cmov_spromotion_32_to_64:266; NO_CMOV: # %bb.0:267; NO_CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax268; NO_CMOV-NEXT: andl $1, %eax269; NO_CMOV-NEXT: negl %eax270; NO_CMOV-NEXT: andl $38941, %eax # imm = 0x981D271; NO_CMOV-NEXT: xorl $43107, %eax # imm = 0xA863272; NO_CMOV-NEXT: xorl %edx, %edx273; NO_CMOV-NEXT: retl274 %t0 = select i1 %c, i32 12414, i32 43107275 %ret = sext i32 %t0 to i64276 ret i64 %ret277}278