723 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X643; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X644; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X645; RUN: llc < %s -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X866; Allow fast-isel to fallback to selection dag on x867; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X868; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X869 10define i32 @test_icmp_eq_i8(i8 %a, i8 %b) {11; SDAG-X64-LABEL: test_icmp_eq_i8:12; SDAG-X64: ## %bb.0:13; SDAG-X64-NEXT: xorl %eax, %eax14; SDAG-X64-NEXT: cmpb %sil, %dil15; SDAG-X64-NEXT: sete %al16; SDAG-X64-NEXT: retq17;18; FAST-X64-LABEL: test_icmp_eq_i8:19; FAST-X64: ## %bb.0:20; FAST-X64-NEXT: cmpb %sil, %dil21; FAST-X64-NEXT: sete %al22; FAST-X64-NEXT: andb $1, %al23; FAST-X64-NEXT: movzbl %al, %eax24; FAST-X64-NEXT: retq25;26; GISEL-X64-LABEL: test_icmp_eq_i8:27; GISEL-X64: ## %bb.0:28; GISEL-X64-NEXT: xorl %eax, %eax29; GISEL-X64-NEXT: cmpb %sil, %dil30; GISEL-X64-NEXT: sete %al31; GISEL-X64-NEXT: andl $1, %eax32; GISEL-X64-NEXT: retq33;34; SDAG-X86-LABEL: test_icmp_eq_i8:35; SDAG-X86: ## %bb.0:36; SDAG-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx37; SDAG-X86-NEXT: xorl %eax, %eax38; SDAG-X86-NEXT: cmpb {{[0-9]+}}(%esp), %cl39; SDAG-X86-NEXT: sete %al40; SDAG-X86-NEXT: retl41;42; FAST-X86-LABEL: test_icmp_eq_i8:43; FAST-X86: ## %bb.0:44; FAST-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax45; FAST-X86-NEXT: cmpb %al, {{[0-9]+}}(%esp)46; FAST-X86-NEXT: sete %al47; FAST-X86-NEXT: andb $1, %al48; FAST-X86-NEXT: movzbl %al, %eax49; FAST-X86-NEXT: retl50;51; GISEL-X86-LABEL: test_icmp_eq_i8:52; GISEL-X86: ## %bb.0:53; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx54; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx55; GISEL-X86-NEXT: xorl %eax, %eax56; GISEL-X86-NEXT: cmpb %dl, %cl57; GISEL-X86-NEXT: sete %al58; GISEL-X86-NEXT: andl $1, %eax59; GISEL-X86-NEXT: retl60 %r = icmp eq i8 %a, %b61 %res = zext i1 %r to i3262 ret i32 %res63}64 65define i32 @test_icmp_eq_i16(i16 %a, i16 %b) {66; SDAG-X64-LABEL: test_icmp_eq_i16:67; SDAG-X64: ## %bb.0:68; SDAG-X64-NEXT: xorl %eax, %eax69; SDAG-X64-NEXT: cmpw %si, %di70; SDAG-X64-NEXT: sete %al71; SDAG-X64-NEXT: retq72;73; FAST-X64-LABEL: test_icmp_eq_i16:74; FAST-X64: ## %bb.0:75; FAST-X64-NEXT: cmpw %si, %di76; FAST-X64-NEXT: sete %al77; FAST-X64-NEXT: andb $1, %al78; FAST-X64-NEXT: movzbl %al, %eax79; FAST-X64-NEXT: retq80;81; GISEL-X64-LABEL: test_icmp_eq_i16:82; GISEL-X64: ## %bb.0:83; GISEL-X64-NEXT: xorl %eax, %eax84; GISEL-X64-NEXT: cmpw %si, %di85; GISEL-X64-NEXT: sete %al86; GISEL-X64-NEXT: andl $1, %eax87; GISEL-X64-NEXT: retq88;89; SDAG-X86-LABEL: test_icmp_eq_i16:90; SDAG-X86: ## %bb.0:91; SDAG-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx92; SDAG-X86-NEXT: xorl %eax, %eax93; SDAG-X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx94; SDAG-X86-NEXT: sete %al95; SDAG-X86-NEXT: retl96;97; FAST-X86-LABEL: test_icmp_eq_i16:98; FAST-X86: ## %bb.0:99; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax100; FAST-X86-NEXT: cmpw %ax, {{[0-9]+}}(%esp)101; FAST-X86-NEXT: sete %al102; FAST-X86-NEXT: andb $1, %al103; FAST-X86-NEXT: movzbl %al, %eax104; FAST-X86-NEXT: retl105;106; GISEL-X86-LABEL: test_icmp_eq_i16:107; GISEL-X86: ## %bb.0:108; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx109; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %edx110; GISEL-X86-NEXT: xorl %eax, %eax111; GISEL-X86-NEXT: cmpw %dx, %cx112; GISEL-X86-NEXT: sete %al113; GISEL-X86-NEXT: andl $1, %eax114; GISEL-X86-NEXT: retl115 %r = icmp eq i16 %a, %b116 %res = zext i1 %r to i32117 ret i32 %res118}119 120define i32 @test_icmp_eq_i64(i64 %a, i64 %b) {121; SDAG-X64-LABEL: test_icmp_eq_i64:122; SDAG-X64: ## %bb.0:123; SDAG-X64-NEXT: xorl %eax, %eax124; SDAG-X64-NEXT: cmpq %rsi, %rdi125; SDAG-X64-NEXT: sete %al126; SDAG-X64-NEXT: retq127;128; FAST-X64-LABEL: test_icmp_eq_i64:129; FAST-X64: ## %bb.0:130; FAST-X64-NEXT: cmpq %rsi, %rdi131; FAST-X64-NEXT: sete %al132; FAST-X64-NEXT: andb $1, %al133; FAST-X64-NEXT: movzbl %al, %eax134; FAST-X64-NEXT: retq135;136; GISEL-X64-LABEL: test_icmp_eq_i64:137; GISEL-X64: ## %bb.0:138; GISEL-X64-NEXT: xorl %eax, %eax139; GISEL-X64-NEXT: cmpq %rsi, %rdi140; GISEL-X64-NEXT: sete %al141; GISEL-X64-NEXT: andl $1, %eax142; GISEL-X64-NEXT: retq143;144; SDAG-X86-LABEL: test_icmp_eq_i64:145; SDAG-X86: ## %bb.0:146; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx147; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx148; SDAG-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx149; SDAG-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx150; SDAG-X86-NEXT: xorl %eax, %eax151; SDAG-X86-NEXT: orl %edx, %ecx152; SDAG-X86-NEXT: sete %al153; SDAG-X86-NEXT: retl154;155; FAST-X86-LABEL: test_icmp_eq_i64:156; FAST-X86: ## %bb.0:157; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax158; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx159; FAST-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx160; FAST-X86-NEXT: xorl {{[0-9]+}}(%esp), %eax161; FAST-X86-NEXT: orl %ecx, %eax162; FAST-X86-NEXT: sete %al163; FAST-X86-NEXT: andb $1, %al164; FAST-X86-NEXT: movzbl %al, %eax165; FAST-X86-NEXT: retl166;167; GISEL-X86-LABEL: test_icmp_eq_i64:168; GISEL-X86: ## %bb.0:169; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax170; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx171; GISEL-X86-NEXT: xorl {{[0-9]+}}(%esp), %eax172; GISEL-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx173; GISEL-X86-NEXT: orl %eax, %ecx174; GISEL-X86-NEXT: xorl %eax, %eax175; GISEL-X86-NEXT: cmpl $0, %ecx176; GISEL-X86-NEXT: sete %al177; GISEL-X86-NEXT: andl $1, %eax178; GISEL-X86-NEXT: retl179 %r = icmp eq i64 %a, %b180 %res = zext i1 %r to i32181 ret i32 %res182}183 184define i32 @test_icmp_eq_i32(i32 %a, i32 %b) {185; SDAG-X64-LABEL: test_icmp_eq_i32:186; SDAG-X64: ## %bb.0:187; SDAG-X64-NEXT: xorl %eax, %eax188; SDAG-X64-NEXT: cmpl %esi, %edi189; SDAG-X64-NEXT: sete %al190; SDAG-X64-NEXT: retq191;192; FAST-X64-LABEL: test_icmp_eq_i32:193; FAST-X64: ## %bb.0:194; FAST-X64-NEXT: cmpl %esi, %edi195; FAST-X64-NEXT: sete %al196; FAST-X64-NEXT: andb $1, %al197; FAST-X64-NEXT: movzbl %al, %eax198; FAST-X64-NEXT: retq199;200; GISEL-X64-LABEL: test_icmp_eq_i32:201; GISEL-X64: ## %bb.0:202; GISEL-X64-NEXT: xorl %eax, %eax203; GISEL-X64-NEXT: cmpl %esi, %edi204; GISEL-X64-NEXT: sete %al205; GISEL-X64-NEXT: andl $1, %eax206; GISEL-X64-NEXT: retq207;208; SDAG-X86-LABEL: test_icmp_eq_i32:209; SDAG-X86: ## %bb.0:210; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx211; SDAG-X86-NEXT: xorl %eax, %eax212; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx213; SDAG-X86-NEXT: sete %al214; SDAG-X86-NEXT: retl215;216; FAST-X86-LABEL: test_icmp_eq_i32:217; FAST-X86: ## %bb.0:218; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax219; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)220; FAST-X86-NEXT: sete %al221; FAST-X86-NEXT: andb $1, %al222; FAST-X86-NEXT: movzbl %al, %eax223; FAST-X86-NEXT: retl224;225; GISEL-X86-LABEL: test_icmp_eq_i32:226; GISEL-X86: ## %bb.0:227; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx228; GISEL-X86-NEXT: xorl %eax, %eax229; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)230; GISEL-X86-NEXT: sete %al231; GISEL-X86-NEXT: andl $1, %eax232; GISEL-X86-NEXT: retl233 %r = icmp eq i32 %a, %b234 %res = zext i1 %r to i32235 ret i32 %res236}237 238define i32 @test_icmp_ne_i32(i32 %a, i32 %b) {239; SDAG-X64-LABEL: test_icmp_ne_i32:240; SDAG-X64: ## %bb.0:241; SDAG-X64-NEXT: xorl %eax, %eax242; SDAG-X64-NEXT: cmpl %esi, %edi243; SDAG-X64-NEXT: setne %al244; SDAG-X64-NEXT: retq245;246; FAST-X64-LABEL: test_icmp_ne_i32:247; FAST-X64: ## %bb.0:248; FAST-X64-NEXT: cmpl %esi, %edi249; FAST-X64-NEXT: setne %al250; FAST-X64-NEXT: andb $1, %al251; FAST-X64-NEXT: movzbl %al, %eax252; FAST-X64-NEXT: retq253;254; GISEL-X64-LABEL: test_icmp_ne_i32:255; GISEL-X64: ## %bb.0:256; GISEL-X64-NEXT: xorl %eax, %eax257; GISEL-X64-NEXT: cmpl %esi, %edi258; GISEL-X64-NEXT: setne %al259; GISEL-X64-NEXT: andl $1, %eax260; GISEL-X64-NEXT: retq261;262; SDAG-X86-LABEL: test_icmp_ne_i32:263; SDAG-X86: ## %bb.0:264; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx265; SDAG-X86-NEXT: xorl %eax, %eax266; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx267; SDAG-X86-NEXT: setne %al268; SDAG-X86-NEXT: retl269;270; FAST-X86-LABEL: test_icmp_ne_i32:271; FAST-X86: ## %bb.0:272; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax273; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)274; FAST-X86-NEXT: setne %al275; FAST-X86-NEXT: andb $1, %al276; FAST-X86-NEXT: movzbl %al, %eax277; FAST-X86-NEXT: retl278;279; GISEL-X86-LABEL: test_icmp_ne_i32:280; GISEL-X86: ## %bb.0:281; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx282; GISEL-X86-NEXT: xorl %eax, %eax283; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)284; GISEL-X86-NEXT: setne %al285; GISEL-X86-NEXT: andl $1, %eax286; GISEL-X86-NEXT: retl287 %r = icmp ne i32 %a, %b288 %res = zext i1 %r to i32289 ret i32 %res290}291 292define i32 @test_icmp_ugt_i32(i32 %a, i32 %b) {293; SDAG-X64-LABEL: test_icmp_ugt_i32:294; SDAG-X64: ## %bb.0:295; SDAG-X64-NEXT: xorl %eax, %eax296; SDAG-X64-NEXT: cmpl %esi, %edi297; SDAG-X64-NEXT: seta %al298; SDAG-X64-NEXT: retq299;300; FAST-X64-LABEL: test_icmp_ugt_i32:301; FAST-X64: ## %bb.0:302; FAST-X64-NEXT: cmpl %esi, %edi303; FAST-X64-NEXT: seta %al304; FAST-X64-NEXT: andb $1, %al305; FAST-X64-NEXT: movzbl %al, %eax306; FAST-X64-NEXT: retq307;308; GISEL-X64-LABEL: test_icmp_ugt_i32:309; GISEL-X64: ## %bb.0:310; GISEL-X64-NEXT: xorl %eax, %eax311; GISEL-X64-NEXT: cmpl %esi, %edi312; GISEL-X64-NEXT: seta %al313; GISEL-X64-NEXT: andl $1, %eax314; GISEL-X64-NEXT: retq315;316; SDAG-X86-LABEL: test_icmp_ugt_i32:317; SDAG-X86: ## %bb.0:318; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx319; SDAG-X86-NEXT: xorl %eax, %eax320; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx321; SDAG-X86-NEXT: seta %al322; SDAG-X86-NEXT: retl323;324; FAST-X86-LABEL: test_icmp_ugt_i32:325; FAST-X86: ## %bb.0:326; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax327; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)328; FAST-X86-NEXT: seta %al329; FAST-X86-NEXT: andb $1, %al330; FAST-X86-NEXT: movzbl %al, %eax331; FAST-X86-NEXT: retl332;333; GISEL-X86-LABEL: test_icmp_ugt_i32:334; GISEL-X86: ## %bb.0:335; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx336; GISEL-X86-NEXT: xorl %eax, %eax337; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)338; GISEL-X86-NEXT: seta %al339; GISEL-X86-NEXT: andl $1, %eax340; GISEL-X86-NEXT: retl341 %r = icmp ugt i32 %a, %b342 %res = zext i1 %r to i32343 ret i32 %res344}345 346define i32 @test_icmp_uge_i32(i32 %a, i32 %b) {347; SDAG-X64-LABEL: test_icmp_uge_i32:348; SDAG-X64: ## %bb.0:349; SDAG-X64-NEXT: xorl %eax, %eax350; SDAG-X64-NEXT: cmpl %esi, %edi351; SDAG-X64-NEXT: setae %al352; SDAG-X64-NEXT: retq353;354; FAST-X64-LABEL: test_icmp_uge_i32:355; FAST-X64: ## %bb.0:356; FAST-X64-NEXT: cmpl %esi, %edi357; FAST-X64-NEXT: setae %al358; FAST-X64-NEXT: andb $1, %al359; FAST-X64-NEXT: movzbl %al, %eax360; FAST-X64-NEXT: retq361;362; GISEL-X64-LABEL: test_icmp_uge_i32:363; GISEL-X64: ## %bb.0:364; GISEL-X64-NEXT: xorl %eax, %eax365; GISEL-X64-NEXT: cmpl %esi, %edi366; GISEL-X64-NEXT: setae %al367; GISEL-X64-NEXT: andl $1, %eax368; GISEL-X64-NEXT: retq369;370; SDAG-X86-LABEL: test_icmp_uge_i32:371; SDAG-X86: ## %bb.0:372; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx373; SDAG-X86-NEXT: xorl %eax, %eax374; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx375; SDAG-X86-NEXT: setae %al376; SDAG-X86-NEXT: retl377;378; FAST-X86-LABEL: test_icmp_uge_i32:379; FAST-X86: ## %bb.0:380; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax381; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)382; FAST-X86-NEXT: setae %al383; FAST-X86-NEXT: andb $1, %al384; FAST-X86-NEXT: movzbl %al, %eax385; FAST-X86-NEXT: retl386;387; GISEL-X86-LABEL: test_icmp_uge_i32:388; GISEL-X86: ## %bb.0:389; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx390; GISEL-X86-NEXT: xorl %eax, %eax391; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)392; GISEL-X86-NEXT: setae %al393; GISEL-X86-NEXT: andl $1, %eax394; GISEL-X86-NEXT: retl395 %r = icmp uge i32 %a, %b396 %res = zext i1 %r to i32397 ret i32 %res398}399 400define i32 @test_icmp_ult_i32(i32 %a, i32 %b) {401; SDAG-X64-LABEL: test_icmp_ult_i32:402; SDAG-X64: ## %bb.0:403; SDAG-X64-NEXT: xorl %eax, %eax404; SDAG-X64-NEXT: cmpl %esi, %edi405; SDAG-X64-NEXT: setb %al406; SDAG-X64-NEXT: retq407;408; FAST-X64-LABEL: test_icmp_ult_i32:409; FAST-X64: ## %bb.0:410; FAST-X64-NEXT: cmpl %esi, %edi411; FAST-X64-NEXT: setb %al412; FAST-X64-NEXT: andb $1, %al413; FAST-X64-NEXT: movzbl %al, %eax414; FAST-X64-NEXT: retq415;416; GISEL-X64-LABEL: test_icmp_ult_i32:417; GISEL-X64: ## %bb.0:418; GISEL-X64-NEXT: xorl %eax, %eax419; GISEL-X64-NEXT: cmpl %esi, %edi420; GISEL-X64-NEXT: setb %al421; GISEL-X64-NEXT: andl $1, %eax422; GISEL-X64-NEXT: retq423;424; SDAG-X86-LABEL: test_icmp_ult_i32:425; SDAG-X86: ## %bb.0:426; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx427; SDAG-X86-NEXT: xorl %eax, %eax428; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx429; SDAG-X86-NEXT: setb %al430; SDAG-X86-NEXT: retl431;432; FAST-X86-LABEL: test_icmp_ult_i32:433; FAST-X86: ## %bb.0:434; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax435; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)436; FAST-X86-NEXT: setb %al437; FAST-X86-NEXT: andb $1, %al438; FAST-X86-NEXT: movzbl %al, %eax439; FAST-X86-NEXT: retl440;441; GISEL-X86-LABEL: test_icmp_ult_i32:442; GISEL-X86: ## %bb.0:443; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx444; GISEL-X86-NEXT: xorl %eax, %eax445; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)446; GISEL-X86-NEXT: setb %al447; GISEL-X86-NEXT: andl $1, %eax448; GISEL-X86-NEXT: retl449 %r = icmp ult i32 %a, %b450 %res = zext i1 %r to i32451 ret i32 %res452}453 454define i32 @test_icmp_ule_i32(i32 %a, i32 %b) {455; SDAG-X64-LABEL: test_icmp_ule_i32:456; SDAG-X64: ## %bb.0:457; SDAG-X64-NEXT: xorl %eax, %eax458; SDAG-X64-NEXT: cmpl %esi, %edi459; SDAG-X64-NEXT: setbe %al460; SDAG-X64-NEXT: retq461;462; FAST-X64-LABEL: test_icmp_ule_i32:463; FAST-X64: ## %bb.0:464; FAST-X64-NEXT: cmpl %esi, %edi465; FAST-X64-NEXT: setbe %al466; FAST-X64-NEXT: andb $1, %al467; FAST-X64-NEXT: movzbl %al, %eax468; FAST-X64-NEXT: retq469;470; GISEL-X64-LABEL: test_icmp_ule_i32:471; GISEL-X64: ## %bb.0:472; GISEL-X64-NEXT: xorl %eax, %eax473; GISEL-X64-NEXT: cmpl %esi, %edi474; GISEL-X64-NEXT: setbe %al475; GISEL-X64-NEXT: andl $1, %eax476; GISEL-X64-NEXT: retq477;478; SDAG-X86-LABEL: test_icmp_ule_i32:479; SDAG-X86: ## %bb.0:480; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx481; SDAG-X86-NEXT: xorl %eax, %eax482; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx483; SDAG-X86-NEXT: setbe %al484; SDAG-X86-NEXT: retl485;486; FAST-X86-LABEL: test_icmp_ule_i32:487; FAST-X86: ## %bb.0:488; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax489; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)490; FAST-X86-NEXT: setbe %al491; FAST-X86-NEXT: andb $1, %al492; FAST-X86-NEXT: movzbl %al, %eax493; FAST-X86-NEXT: retl494;495; GISEL-X86-LABEL: test_icmp_ule_i32:496; GISEL-X86: ## %bb.0:497; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx498; GISEL-X86-NEXT: xorl %eax, %eax499; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)500; GISEL-X86-NEXT: setbe %al501; GISEL-X86-NEXT: andl $1, %eax502; GISEL-X86-NEXT: retl503 %r = icmp ule i32 %a, %b504 %res = zext i1 %r to i32505 ret i32 %res506}507 508define i32 @test_icmp_sgt_i32(i32 %a, i32 %b) {509; SDAG-X64-LABEL: test_icmp_sgt_i32:510; SDAG-X64: ## %bb.0:511; SDAG-X64-NEXT: xorl %eax, %eax512; SDAG-X64-NEXT: cmpl %esi, %edi513; SDAG-X64-NEXT: setg %al514; SDAG-X64-NEXT: retq515;516; FAST-X64-LABEL: test_icmp_sgt_i32:517; FAST-X64: ## %bb.0:518; FAST-X64-NEXT: cmpl %esi, %edi519; FAST-X64-NEXT: setg %al520; FAST-X64-NEXT: andb $1, %al521; FAST-X64-NEXT: movzbl %al, %eax522; FAST-X64-NEXT: retq523;524; GISEL-X64-LABEL: test_icmp_sgt_i32:525; GISEL-X64: ## %bb.0:526; GISEL-X64-NEXT: xorl %eax, %eax527; GISEL-X64-NEXT: cmpl %esi, %edi528; GISEL-X64-NEXT: setg %al529; GISEL-X64-NEXT: andl $1, %eax530; GISEL-X64-NEXT: retq531;532; SDAG-X86-LABEL: test_icmp_sgt_i32:533; SDAG-X86: ## %bb.0:534; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx535; SDAG-X86-NEXT: xorl %eax, %eax536; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx537; SDAG-X86-NEXT: setg %al538; SDAG-X86-NEXT: retl539;540; FAST-X86-LABEL: test_icmp_sgt_i32:541; FAST-X86: ## %bb.0:542; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax543; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)544; FAST-X86-NEXT: setg %al545; FAST-X86-NEXT: andb $1, %al546; FAST-X86-NEXT: movzbl %al, %eax547; FAST-X86-NEXT: retl548;549; GISEL-X86-LABEL: test_icmp_sgt_i32:550; GISEL-X86: ## %bb.0:551; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx552; GISEL-X86-NEXT: xorl %eax, %eax553; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)554; GISEL-X86-NEXT: setg %al555; GISEL-X86-NEXT: andl $1, %eax556; GISEL-X86-NEXT: retl557 %r = icmp sgt i32 %a, %b558 %res = zext i1 %r to i32559 ret i32 %res560}561 562define i32 @test_icmp_sge_i32(i32 %a, i32 %b) {563; SDAG-X64-LABEL: test_icmp_sge_i32:564; SDAG-X64: ## %bb.0:565; SDAG-X64-NEXT: xorl %eax, %eax566; SDAG-X64-NEXT: cmpl %esi, %edi567; SDAG-X64-NEXT: setge %al568; SDAG-X64-NEXT: retq569;570; FAST-X64-LABEL: test_icmp_sge_i32:571; FAST-X64: ## %bb.0:572; FAST-X64-NEXT: cmpl %esi, %edi573; FAST-X64-NEXT: setge %al574; FAST-X64-NEXT: andb $1, %al575; FAST-X64-NEXT: movzbl %al, %eax576; FAST-X64-NEXT: retq577;578; GISEL-X64-LABEL: test_icmp_sge_i32:579; GISEL-X64: ## %bb.0:580; GISEL-X64-NEXT: xorl %eax, %eax581; GISEL-X64-NEXT: cmpl %esi, %edi582; GISEL-X64-NEXT: setge %al583; GISEL-X64-NEXT: andl $1, %eax584; GISEL-X64-NEXT: retq585;586; SDAG-X86-LABEL: test_icmp_sge_i32:587; SDAG-X86: ## %bb.0:588; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx589; SDAG-X86-NEXT: xorl %eax, %eax590; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx591; SDAG-X86-NEXT: setge %al592; SDAG-X86-NEXT: retl593;594; FAST-X86-LABEL: test_icmp_sge_i32:595; FAST-X86: ## %bb.0:596; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax597; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)598; FAST-X86-NEXT: setge %al599; FAST-X86-NEXT: andb $1, %al600; FAST-X86-NEXT: movzbl %al, %eax601; FAST-X86-NEXT: retl602;603; GISEL-X86-LABEL: test_icmp_sge_i32:604; GISEL-X86: ## %bb.0:605; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx606; GISEL-X86-NEXT: xorl %eax, %eax607; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)608; GISEL-X86-NEXT: setge %al609; GISEL-X86-NEXT: andl $1, %eax610; GISEL-X86-NEXT: retl611 %r = icmp sge i32 %a, %b612 %res = zext i1 %r to i32613 ret i32 %res614}615 616define i32 @test_icmp_slt_i32(i32 %a, i32 %b) {617; SDAG-X64-LABEL: test_icmp_slt_i32:618; SDAG-X64: ## %bb.0:619; SDAG-X64-NEXT: xorl %eax, %eax620; SDAG-X64-NEXT: cmpl %esi, %edi621; SDAG-X64-NEXT: setl %al622; SDAG-X64-NEXT: retq623;624; FAST-X64-LABEL: test_icmp_slt_i32:625; FAST-X64: ## %bb.0:626; FAST-X64-NEXT: cmpl %esi, %edi627; FAST-X64-NEXT: setl %al628; FAST-X64-NEXT: andb $1, %al629; FAST-X64-NEXT: movzbl %al, %eax630; FAST-X64-NEXT: retq631;632; GISEL-X64-LABEL: test_icmp_slt_i32:633; GISEL-X64: ## %bb.0:634; GISEL-X64-NEXT: xorl %eax, %eax635; GISEL-X64-NEXT: cmpl %esi, %edi636; GISEL-X64-NEXT: setl %al637; GISEL-X64-NEXT: andl $1, %eax638; GISEL-X64-NEXT: retq639;640; SDAG-X86-LABEL: test_icmp_slt_i32:641; SDAG-X86: ## %bb.0:642; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx643; SDAG-X86-NEXT: xorl %eax, %eax644; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx645; SDAG-X86-NEXT: setl %al646; SDAG-X86-NEXT: retl647;648; FAST-X86-LABEL: test_icmp_slt_i32:649; FAST-X86: ## %bb.0:650; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax651; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)652; FAST-X86-NEXT: setl %al653; FAST-X86-NEXT: andb $1, %al654; FAST-X86-NEXT: movzbl %al, %eax655; FAST-X86-NEXT: retl656;657; GISEL-X86-LABEL: test_icmp_slt_i32:658; GISEL-X86: ## %bb.0:659; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx660; GISEL-X86-NEXT: xorl %eax, %eax661; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)662; GISEL-X86-NEXT: setl %al663; GISEL-X86-NEXT: andl $1, %eax664; GISEL-X86-NEXT: retl665 %r = icmp slt i32 %a, %b666 %res = zext i1 %r to i32667 ret i32 %res668}669 670define i32 @test_icmp_sle_i32(i32 %a, i32 %b) {671; SDAG-X64-LABEL: test_icmp_sle_i32:672; SDAG-X64: ## %bb.0:673; SDAG-X64-NEXT: xorl %eax, %eax674; SDAG-X64-NEXT: cmpl %esi, %edi675; SDAG-X64-NEXT: setle %al676; SDAG-X64-NEXT: retq677;678; FAST-X64-LABEL: test_icmp_sle_i32:679; FAST-X64: ## %bb.0:680; FAST-X64-NEXT: cmpl %esi, %edi681; FAST-X64-NEXT: setle %al682; FAST-X64-NEXT: andb $1, %al683; FAST-X64-NEXT: movzbl %al, %eax684; FAST-X64-NEXT: retq685;686; GISEL-X64-LABEL: test_icmp_sle_i32:687; GISEL-X64: ## %bb.0:688; GISEL-X64-NEXT: xorl %eax, %eax689; GISEL-X64-NEXT: cmpl %esi, %edi690; GISEL-X64-NEXT: setle %al691; GISEL-X64-NEXT: andl $1, %eax692; GISEL-X64-NEXT: retq693;694; SDAG-X86-LABEL: test_icmp_sle_i32:695; SDAG-X86: ## %bb.0:696; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx697; SDAG-X86-NEXT: xorl %eax, %eax698; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx699; SDAG-X86-NEXT: setle %al700; SDAG-X86-NEXT: retl701;702; FAST-X86-LABEL: test_icmp_sle_i32:703; FAST-X86: ## %bb.0:704; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax705; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp)706; FAST-X86-NEXT: setle %al707; FAST-X86-NEXT: andb $1, %al708; FAST-X86-NEXT: movzbl %al, %eax709; FAST-X86-NEXT: retl710;711; GISEL-X86-LABEL: test_icmp_sle_i32:712; GISEL-X86: ## %bb.0:713; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx714; GISEL-X86-NEXT: xorl %eax, %eax715; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp)716; GISEL-X86-NEXT: setle %al717; GISEL-X86-NEXT: andl $1, %eax718; GISEL-X86-NEXT: retl719 %r = icmp sle i32 %a, %b720 %res = zext i1 %r to i32721 ret i32 %res722}723