224 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s -check-prefix=X643; RUN: llc < %s -mtriple=i686-apple-darwin | FileCheck %s -check-prefix=X864 5; rdar://73292066 7; In 32-bit the partial register stall would degrade performance.8 9define zeroext i16 @test1(i16 zeroext %c, i16 zeroext %k) nounwind ssp {10; X64-LABEL: test1:11; X64: ## %bb.0: ## %entry12; X64-NEXT: movl %esi, %eax13; X64-NEXT: incl %esi14; X64-NEXT: cmpw %di, %ax15; X64-NEXT: jne LBB0_216; X64-NEXT: ## %bb.1: ## %bb17; X64-NEXT: pushq %rbx18; X64-NEXT: movzwl %si, %ebx19; X64-NEXT: movl %ebx, %edi20; X64-NEXT: callq _foo21; X64-NEXT: movl %ebx, %eax22; X64-NEXT: popq %rbx23; X64-NEXT: retq24; X64-NEXT: LBB0_2: ## %bb125; X64-NEXT: movzwl %si, %eax26; X64-NEXT: retq27;28; X86-LABEL: test1:29; X86: ## %bb.0: ## %entry30; X86-NEXT: pushl %esi31; X86-NEXT: subl $8, %esp32; X86-NEXT: movl {{[0-9]+}}(%esp), %eax33; X86-NEXT: movl %eax, %ecx34; X86-NEXT: incl %eax35; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx36; X86-NEXT: jne LBB0_237; X86-NEXT: ## %bb.1: ## %bb38; X86-NEXT: movzwl %ax, %esi39; X86-NEXT: movl %esi, (%esp)40; X86-NEXT: calll _foo41; X86-NEXT: movl %esi, %eax42; X86-NEXT: jmp LBB0_343; X86-NEXT: LBB0_2: ## %bb144; X86-NEXT: movzwl %ax, %eax45; X86-NEXT: LBB0_3: ## %bb146; X86-NEXT: addl $8, %esp47; X86-NEXT: popl %esi48; X86-NEXT: retl49entry:50 %0 = icmp eq i16 %k, %c51 %1 = add i16 %k, 152 br i1 %0, label %bb, label %bb153 54bb:55 tail call void @foo(i16 zeroext %1) nounwind56 ret i16 %157 58bb1:59 ret i16 %160}61 62define zeroext i16 @test2(i16 zeroext %c, i16 zeroext %k) nounwind ssp {63; X64-LABEL: test2:64; X64: ## %bb.0: ## %entry65; X64-NEXT: movl %esi, %eax66; X64-NEXT: decl %esi67; X64-NEXT: cmpw %di, %ax68; X64-NEXT: jne LBB1_269; X64-NEXT: ## %bb.1: ## %bb70; X64-NEXT: pushq %rbx71; X64-NEXT: movzwl %si, %ebx72; X64-NEXT: movl %ebx, %edi73; X64-NEXT: callq _foo74; X64-NEXT: movl %ebx, %eax75; X64-NEXT: popq %rbx76; X64-NEXT: retq77; X64-NEXT: LBB1_2: ## %bb178; X64-NEXT: movzwl %si, %eax79; X64-NEXT: retq80;81; X86-LABEL: test2:82; X86: ## %bb.0: ## %entry83; X86-NEXT: pushl %esi84; X86-NEXT: subl $8, %esp85; X86-NEXT: movl {{[0-9]+}}(%esp), %eax86; X86-NEXT: movl %eax, %ecx87; X86-NEXT: decl %eax88; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx89; X86-NEXT: jne LBB1_290; X86-NEXT: ## %bb.1: ## %bb91; X86-NEXT: movzwl %ax, %esi92; X86-NEXT: movl %esi, (%esp)93; X86-NEXT: calll _foo94; X86-NEXT: movl %esi, %eax95; X86-NEXT: jmp LBB1_396; X86-NEXT: LBB1_2: ## %bb197; X86-NEXT: movzwl %ax, %eax98; X86-NEXT: LBB1_3: ## %bb199; X86-NEXT: addl $8, %esp100; X86-NEXT: popl %esi101; X86-NEXT: retl102entry:103 %0 = icmp eq i16 %k, %c104 %1 = add i16 %k, -1105 br i1 %0, label %bb, label %bb1106 107bb:108 tail call void @foo(i16 zeroext %1) nounwind109 ret i16 %1110 111bb1:112 ret i16 %1113}114 115declare void @foo(i16 zeroext)116 117define zeroext i16 @test3(i16 zeroext %c, i16 zeroext %k) nounwind ssp {118; X64-LABEL: test3:119; X64: ## %bb.0: ## %entry120; X64-NEXT: movl %esi, %eax121; X64-NEXT: addl $2, %esi122; X64-NEXT: cmpw %di, %ax123; X64-NEXT: jne LBB2_2124; X64-NEXT: ## %bb.1: ## %bb125; X64-NEXT: pushq %rbx126; X64-NEXT: movzwl %si, %ebx127; X64-NEXT: movl %ebx, %edi128; X64-NEXT: callq _foo129; X64-NEXT: movl %ebx, %eax130; X64-NEXT: popq %rbx131; X64-NEXT: retq132; X64-NEXT: LBB2_2: ## %bb1133; X64-NEXT: movzwl %si, %eax134; X64-NEXT: retq135;136; X86-LABEL: test3:137; X86: ## %bb.0: ## %entry138; X86-NEXT: pushl %esi139; X86-NEXT: subl $8, %esp140; X86-NEXT: movl {{[0-9]+}}(%esp), %eax141; X86-NEXT: movl %eax, %ecx142; X86-NEXT: addl $2, %eax143; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx144; X86-NEXT: jne LBB2_2145; X86-NEXT: ## %bb.1: ## %bb146; X86-NEXT: movzwl %ax, %esi147; X86-NEXT: movl %esi, (%esp)148; X86-NEXT: calll _foo149; X86-NEXT: movl %esi, %eax150; X86-NEXT: jmp LBB2_3151; X86-NEXT: LBB2_2: ## %bb1152; X86-NEXT: movzwl %ax, %eax153; X86-NEXT: LBB2_3: ## %bb1154; X86-NEXT: addl $8, %esp155; X86-NEXT: popl %esi156; X86-NEXT: retl157entry:158 %0 = add i16 %k, 2159 %1 = icmp eq i16 %k, %c160 br i1 %1, label %bb, label %bb1161 162bb:163 tail call void @foo(i16 zeroext %0) nounwind164 ret i16 %0165 166bb1:167 ret i16 %0168}169 170define zeroext i16 @test4(i16 zeroext %c, i16 zeroext %k) nounwind ssp {171; X64-LABEL: test4:172; X64: ## %bb.0: ## %entry173; X64-NEXT: movl %esi, %eax174; X64-NEXT: addl %edi, %esi175; X64-NEXT: cmpw %di, %ax176; X64-NEXT: jne LBB3_2177; X64-NEXT: ## %bb.1: ## %bb178; X64-NEXT: pushq %rbx179; X64-NEXT: movzwl %si, %ebx180; X64-NEXT: movl %ebx, %edi181; X64-NEXT: callq _foo182; X64-NEXT: movl %ebx, %eax183; X64-NEXT: popq %rbx184; X64-NEXT: retq185; X64-NEXT: LBB3_2: ## %bb1186; X64-NEXT: movzwl %si, %eax187; X64-NEXT: retq188;189; X86-LABEL: test4:190; X86: ## %bb.0: ## %entry191; X86-NEXT: pushl %esi192; X86-NEXT: subl $8, %esp193; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx194; X86-NEXT: movl {{[0-9]+}}(%esp), %eax195; X86-NEXT: movl %eax, %edx196; X86-NEXT: addl %ecx, %eax197; X86-NEXT: cmpw %cx, %dx198; X86-NEXT: jne LBB3_2199; X86-NEXT: ## %bb.1: ## %bb200; X86-NEXT: movzwl %ax, %esi201; X86-NEXT: movl %esi, (%esp)202; X86-NEXT: calll _foo203; X86-NEXT: movl %esi, %eax204; X86-NEXT: jmp LBB3_3205; X86-NEXT: LBB3_2: ## %bb1206; X86-NEXT: movzwl %ax, %eax207; X86-NEXT: LBB3_3: ## %bb1208; X86-NEXT: addl $8, %esp209; X86-NEXT: popl %esi210; X86-NEXT: retl211entry:212 %0 = add i16 %k, %c213 %1 = icmp eq i16 %k, %c214 br i1 %1, label %bb, label %bb1215 216bb:217 tail call void @foo(i16 zeroext %0) nounwind218 ret i16 %0219 220bb1:221 ret i16 %0222}223 224