1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=SDAG-X64 3; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefix=FAST-X64 4; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X64 5; RUN: llc < %s -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=SDAG-X86 6; Allow fast-isel to fallback to selection dag on x86 7; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=FAST-X86 8; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X86 9 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, %eax 14; SDAG-X64-NEXT: cmpb %sil, %dil 15; SDAG-X64-NEXT: sete %al 16; SDAG-X64-NEXT: retq 17; 18; FAST-X64-LABEL: test_icmp_eq_i8: 19; FAST-X64: ## %bb.0: 20; FAST-X64-NEXT: cmpb %sil, %dil 21; FAST-X64-NEXT: sete %al 22; FAST-X64-NEXT: andb $1, %al 23; FAST-X64-NEXT: movzbl %al, %eax 24; FAST-X64-NEXT: retq 25; 26; GISEL-X64-LABEL: test_icmp_eq_i8: 27; GISEL-X64: ## %bb.0: 28; GISEL-X64-NEXT: xorl %eax, %eax 29; GISEL-X64-NEXT: cmpb %sil, %dil 30; GISEL-X64-NEXT: sete %al 31; GISEL-X64-NEXT: andl $1, %eax 32; GISEL-X64-NEXT: retq 33; 34; SDAG-X86-LABEL: test_icmp_eq_i8: 35; SDAG-X86: ## %bb.0: 36; SDAG-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx 37; SDAG-X86-NEXT: xorl %eax, %eax 38; SDAG-X86-NEXT: cmpb {{[0-9]+}}(%esp), %cl 39; SDAG-X86-NEXT: sete %al 40; SDAG-X86-NEXT: retl 41; 42; FAST-X86-LABEL: test_icmp_eq_i8: 43; FAST-X86: ## %bb.0: 44; FAST-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 45; FAST-X86-NEXT: cmpb %al, {{[0-9]+}}(%esp) 46; FAST-X86-NEXT: sete %al 47; FAST-X86-NEXT: andb $1, %al 48; FAST-X86-NEXT: movzbl %al, %eax 49; FAST-X86-NEXT: retl 50; 51; GISEL-X86-LABEL: test_icmp_eq_i8: 52; GISEL-X86: ## %bb.0: 53; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 54; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 55; GISEL-X86-NEXT: xorl %eax, %eax 56; GISEL-X86-NEXT: cmpb %dl, %cl 57; GISEL-X86-NEXT: sete %al 58; GISEL-X86-NEXT: andl $1, %eax 59; GISEL-X86-NEXT: retl 60 %r = icmp eq i8 %a, %b 61 %res = zext i1 %r to i32 62 ret i32 %res 63} 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, %eax 69; SDAG-X64-NEXT: cmpw %si, %di 70; SDAG-X64-NEXT: sete %al 71; SDAG-X64-NEXT: retq 72; 73; FAST-X64-LABEL: test_icmp_eq_i16: 74; FAST-X64: ## %bb.0: 75; FAST-X64-NEXT: cmpw %si, %di 76; FAST-X64-NEXT: sete %al 77; FAST-X64-NEXT: andb $1, %al 78; FAST-X64-NEXT: movzbl %al, %eax 79; FAST-X64-NEXT: retq 80; 81; GISEL-X64-LABEL: test_icmp_eq_i16: 82; GISEL-X64: ## %bb.0: 83; GISEL-X64-NEXT: xorl %eax, %eax 84; GISEL-X64-NEXT: cmpw %si, %di 85; GISEL-X64-NEXT: sete %al 86; GISEL-X64-NEXT: andl $1, %eax 87; GISEL-X64-NEXT: retq 88; 89; SDAG-X86-LABEL: test_icmp_eq_i16: 90; SDAG-X86: ## %bb.0: 91; SDAG-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx 92; SDAG-X86-NEXT: xorl %eax, %eax 93; SDAG-X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx 94; SDAG-X86-NEXT: sete %al 95; SDAG-X86-NEXT: retl 96; 97; FAST-X86-LABEL: test_icmp_eq_i16: 98; FAST-X86: ## %bb.0: 99; FAST-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 100; FAST-X86-NEXT: cmpw %ax, {{[0-9]+}}(%esp) 101; FAST-X86-NEXT: sete %al 102; FAST-X86-NEXT: andb $1, %al 103; FAST-X86-NEXT: movzbl %al, %eax 104; FAST-X86-NEXT: retl 105; 106; GISEL-X86-LABEL: test_icmp_eq_i16: 107; GISEL-X86: ## %bb.0: 108; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 109; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 110; GISEL-X86-NEXT: xorl %eax, %eax 111; GISEL-X86-NEXT: cmpw %dx, %cx 112; GISEL-X86-NEXT: sete %al 113; GISEL-X86-NEXT: andl $1, %eax 114; GISEL-X86-NEXT: retl 115 %r = icmp eq i16 %a, %b 116 %res = zext i1 %r to i32 117 ret i32 %res 118} 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, %eax 124; SDAG-X64-NEXT: cmpq %rsi, %rdi 125; SDAG-X64-NEXT: sete %al 126; SDAG-X64-NEXT: retq 127; 128; FAST-X64-LABEL: test_icmp_eq_i64: 129; FAST-X64: ## %bb.0: 130; FAST-X64-NEXT: cmpq %rsi, %rdi 131; FAST-X64-NEXT: sete %al 132; FAST-X64-NEXT: andb $1, %al 133; FAST-X64-NEXT: movzbl %al, %eax 134; FAST-X64-NEXT: retq 135; 136; GISEL-X64-LABEL: test_icmp_eq_i64: 137; GISEL-X64: ## %bb.0: 138; GISEL-X64-NEXT: xorl %eax, %eax 139; GISEL-X64-NEXT: cmpq %rsi, %rdi 140; GISEL-X64-NEXT: sete %al 141; GISEL-X64-NEXT: andl $1, %eax 142; GISEL-X64-NEXT: retq 143; 144; SDAG-X86-LABEL: test_icmp_eq_i64: 145; SDAG-X86: ## %bb.0: 146; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 147; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 148; SDAG-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx 149; SDAG-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx 150; SDAG-X86-NEXT: xorl %eax, %eax 151; SDAG-X86-NEXT: orl %edx, %ecx 152; SDAG-X86-NEXT: sete %al 153; SDAG-X86-NEXT: retl 154; 155; FAST-X86-LABEL: test_icmp_eq_i64: 156; FAST-X86: ## %bb.0: 157; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 158; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 159; FAST-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx 160; FAST-X86-NEXT: xorl {{[0-9]+}}(%esp), %eax 161; FAST-X86-NEXT: orl %ecx, %eax 162; FAST-X86-NEXT: sete %al 163; FAST-X86-NEXT: andb $1, %al 164; FAST-X86-NEXT: movzbl %al, %eax 165; FAST-X86-NEXT: retl 166; 167; GISEL-X86-LABEL: test_icmp_eq_i64: 168; GISEL-X86: ## %bb.0: 169; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 170; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 171; GISEL-X86-NEXT: xorl {{[0-9]+}}(%esp), %eax 172; GISEL-X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx 173; GISEL-X86-NEXT: orl %eax, %ecx 174; GISEL-X86-NEXT: xorl %eax, %eax 175; GISEL-X86-NEXT: cmpl $0, %ecx 176; GISEL-X86-NEXT: sete %al 177; GISEL-X86-NEXT: andl $1, %eax 178; GISEL-X86-NEXT: retl 179 %r = icmp eq i64 %a, %b 180 %res = zext i1 %r to i32 181 ret i32 %res 182} 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, %eax 188; SDAG-X64-NEXT: cmpl %esi, %edi 189; SDAG-X64-NEXT: sete %al 190; SDAG-X64-NEXT: retq 191; 192; FAST-X64-LABEL: test_icmp_eq_i32: 193; FAST-X64: ## %bb.0: 194; FAST-X64-NEXT: cmpl %esi, %edi 195; FAST-X64-NEXT: sete %al 196; FAST-X64-NEXT: andb $1, %al 197; FAST-X64-NEXT: movzbl %al, %eax 198; FAST-X64-NEXT: retq 199; 200; GISEL-X64-LABEL: test_icmp_eq_i32: 201; GISEL-X64: ## %bb.0: 202; GISEL-X64-NEXT: xorl %eax, %eax 203; GISEL-X64-NEXT: cmpl %esi, %edi 204; GISEL-X64-NEXT: sete %al 205; GISEL-X64-NEXT: andl $1, %eax 206; GISEL-X64-NEXT: retq 207; 208; SDAG-X86-LABEL: test_icmp_eq_i32: 209; SDAG-X86: ## %bb.0: 210; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 211; SDAG-X86-NEXT: xorl %eax, %eax 212; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 213; SDAG-X86-NEXT: sete %al 214; SDAG-X86-NEXT: retl 215; 216; FAST-X86-LABEL: test_icmp_eq_i32: 217; FAST-X86: ## %bb.0: 218; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 219; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 220; FAST-X86-NEXT: sete %al 221; FAST-X86-NEXT: andb $1, %al 222; FAST-X86-NEXT: movzbl %al, %eax 223; FAST-X86-NEXT: retl 224; 225; GISEL-X86-LABEL: test_icmp_eq_i32: 226; GISEL-X86: ## %bb.0: 227; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 228; GISEL-X86-NEXT: xorl %eax, %eax 229; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 230; GISEL-X86-NEXT: sete %al 231; GISEL-X86-NEXT: andl $1, %eax 232; GISEL-X86-NEXT: retl 233 %r = icmp eq i32 %a, %b 234 %res = zext i1 %r to i32 235 ret i32 %res 236} 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, %eax 242; SDAG-X64-NEXT: cmpl %esi, %edi 243; SDAG-X64-NEXT: setne %al 244; SDAG-X64-NEXT: retq 245; 246; FAST-X64-LABEL: test_icmp_ne_i32: 247; FAST-X64: ## %bb.0: 248; FAST-X64-NEXT: cmpl %esi, %edi 249; FAST-X64-NEXT: setne %al 250; FAST-X64-NEXT: andb $1, %al 251; FAST-X64-NEXT: movzbl %al, %eax 252; FAST-X64-NEXT: retq 253; 254; GISEL-X64-LABEL: test_icmp_ne_i32: 255; GISEL-X64: ## %bb.0: 256; GISEL-X64-NEXT: xorl %eax, %eax 257; GISEL-X64-NEXT: cmpl %esi, %edi 258; GISEL-X64-NEXT: setne %al 259; GISEL-X64-NEXT: andl $1, %eax 260; GISEL-X64-NEXT: retq 261; 262; SDAG-X86-LABEL: test_icmp_ne_i32: 263; SDAG-X86: ## %bb.0: 264; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 265; SDAG-X86-NEXT: xorl %eax, %eax 266; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 267; SDAG-X86-NEXT: setne %al 268; SDAG-X86-NEXT: retl 269; 270; FAST-X86-LABEL: test_icmp_ne_i32: 271; FAST-X86: ## %bb.0: 272; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 273; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 274; FAST-X86-NEXT: setne %al 275; FAST-X86-NEXT: andb $1, %al 276; FAST-X86-NEXT: movzbl %al, %eax 277; FAST-X86-NEXT: retl 278; 279; GISEL-X86-LABEL: test_icmp_ne_i32: 280; GISEL-X86: ## %bb.0: 281; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 282; GISEL-X86-NEXT: xorl %eax, %eax 283; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 284; GISEL-X86-NEXT: setne %al 285; GISEL-X86-NEXT: andl $1, %eax 286; GISEL-X86-NEXT: retl 287 %r = icmp ne i32 %a, %b 288 %res = zext i1 %r to i32 289 ret i32 %res 290} 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, %eax 296; SDAG-X64-NEXT: cmpl %esi, %edi 297; SDAG-X64-NEXT: seta %al 298; SDAG-X64-NEXT: retq 299; 300; FAST-X64-LABEL: test_icmp_ugt_i32: 301; FAST-X64: ## %bb.0: 302; FAST-X64-NEXT: cmpl %esi, %edi 303; FAST-X64-NEXT: seta %al 304; FAST-X64-NEXT: andb $1, %al 305; FAST-X64-NEXT: movzbl %al, %eax 306; FAST-X64-NEXT: retq 307; 308; GISEL-X64-LABEL: test_icmp_ugt_i32: 309; GISEL-X64: ## %bb.0: 310; GISEL-X64-NEXT: xorl %eax, %eax 311; GISEL-X64-NEXT: cmpl %esi, %edi 312; GISEL-X64-NEXT: seta %al 313; GISEL-X64-NEXT: andl $1, %eax 314; GISEL-X64-NEXT: retq 315; 316; SDAG-X86-LABEL: test_icmp_ugt_i32: 317; SDAG-X86: ## %bb.0: 318; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 319; SDAG-X86-NEXT: xorl %eax, %eax 320; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 321; SDAG-X86-NEXT: seta %al 322; SDAG-X86-NEXT: retl 323; 324; FAST-X86-LABEL: test_icmp_ugt_i32: 325; FAST-X86: ## %bb.0: 326; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 327; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 328; FAST-X86-NEXT: seta %al 329; FAST-X86-NEXT: andb $1, %al 330; FAST-X86-NEXT: movzbl %al, %eax 331; FAST-X86-NEXT: retl 332; 333; GISEL-X86-LABEL: test_icmp_ugt_i32: 334; GISEL-X86: ## %bb.0: 335; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 336; GISEL-X86-NEXT: xorl %eax, %eax 337; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 338; GISEL-X86-NEXT: seta %al 339; GISEL-X86-NEXT: andl $1, %eax 340; GISEL-X86-NEXT: retl 341 %r = icmp ugt i32 %a, %b 342 %res = zext i1 %r to i32 343 ret i32 %res 344} 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, %eax 350; SDAG-X64-NEXT: cmpl %esi, %edi 351; SDAG-X64-NEXT: setae %al 352; SDAG-X64-NEXT: retq 353; 354; FAST-X64-LABEL: test_icmp_uge_i32: 355; FAST-X64: ## %bb.0: 356; FAST-X64-NEXT: cmpl %esi, %edi 357; FAST-X64-NEXT: setae %al 358; FAST-X64-NEXT: andb $1, %al 359; FAST-X64-NEXT: movzbl %al, %eax 360; FAST-X64-NEXT: retq 361; 362; GISEL-X64-LABEL: test_icmp_uge_i32: 363; GISEL-X64: ## %bb.0: 364; GISEL-X64-NEXT: xorl %eax, %eax 365; GISEL-X64-NEXT: cmpl %esi, %edi 366; GISEL-X64-NEXT: setae %al 367; GISEL-X64-NEXT: andl $1, %eax 368; GISEL-X64-NEXT: retq 369; 370; SDAG-X86-LABEL: test_icmp_uge_i32: 371; SDAG-X86: ## %bb.0: 372; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 373; SDAG-X86-NEXT: xorl %eax, %eax 374; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 375; SDAG-X86-NEXT: setae %al 376; SDAG-X86-NEXT: retl 377; 378; FAST-X86-LABEL: test_icmp_uge_i32: 379; FAST-X86: ## %bb.0: 380; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 381; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 382; FAST-X86-NEXT: setae %al 383; FAST-X86-NEXT: andb $1, %al 384; FAST-X86-NEXT: movzbl %al, %eax 385; FAST-X86-NEXT: retl 386; 387; GISEL-X86-LABEL: test_icmp_uge_i32: 388; GISEL-X86: ## %bb.0: 389; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 390; GISEL-X86-NEXT: xorl %eax, %eax 391; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 392; GISEL-X86-NEXT: setae %al 393; GISEL-X86-NEXT: andl $1, %eax 394; GISEL-X86-NEXT: retl 395 %r = icmp uge i32 %a, %b 396 %res = zext i1 %r to i32 397 ret i32 %res 398} 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, %eax 404; SDAG-X64-NEXT: cmpl %esi, %edi 405; SDAG-X64-NEXT: setb %al 406; SDAG-X64-NEXT: retq 407; 408; FAST-X64-LABEL: test_icmp_ult_i32: 409; FAST-X64: ## %bb.0: 410; FAST-X64-NEXT: cmpl %esi, %edi 411; FAST-X64-NEXT: setb %al 412; FAST-X64-NEXT: andb $1, %al 413; FAST-X64-NEXT: movzbl %al, %eax 414; FAST-X64-NEXT: retq 415; 416; GISEL-X64-LABEL: test_icmp_ult_i32: 417; GISEL-X64: ## %bb.0: 418; GISEL-X64-NEXT: xorl %eax, %eax 419; GISEL-X64-NEXT: cmpl %esi, %edi 420; GISEL-X64-NEXT: setb %al 421; GISEL-X64-NEXT: andl $1, %eax 422; GISEL-X64-NEXT: retq 423; 424; SDAG-X86-LABEL: test_icmp_ult_i32: 425; SDAG-X86: ## %bb.0: 426; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 427; SDAG-X86-NEXT: xorl %eax, %eax 428; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 429; SDAG-X86-NEXT: setb %al 430; SDAG-X86-NEXT: retl 431; 432; FAST-X86-LABEL: test_icmp_ult_i32: 433; FAST-X86: ## %bb.0: 434; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 435; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 436; FAST-X86-NEXT: setb %al 437; FAST-X86-NEXT: andb $1, %al 438; FAST-X86-NEXT: movzbl %al, %eax 439; FAST-X86-NEXT: retl 440; 441; GISEL-X86-LABEL: test_icmp_ult_i32: 442; GISEL-X86: ## %bb.0: 443; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 444; GISEL-X86-NEXT: xorl %eax, %eax 445; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 446; GISEL-X86-NEXT: setb %al 447; GISEL-X86-NEXT: andl $1, %eax 448; GISEL-X86-NEXT: retl 449 %r = icmp ult i32 %a, %b 450 %res = zext i1 %r to i32 451 ret i32 %res 452} 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, %eax 458; SDAG-X64-NEXT: cmpl %esi, %edi 459; SDAG-X64-NEXT: setbe %al 460; SDAG-X64-NEXT: retq 461; 462; FAST-X64-LABEL: test_icmp_ule_i32: 463; FAST-X64: ## %bb.0: 464; FAST-X64-NEXT: cmpl %esi, %edi 465; FAST-X64-NEXT: setbe %al 466; FAST-X64-NEXT: andb $1, %al 467; FAST-X64-NEXT: movzbl %al, %eax 468; FAST-X64-NEXT: retq 469; 470; GISEL-X64-LABEL: test_icmp_ule_i32: 471; GISEL-X64: ## %bb.0: 472; GISEL-X64-NEXT: xorl %eax, %eax 473; GISEL-X64-NEXT: cmpl %esi, %edi 474; GISEL-X64-NEXT: setbe %al 475; GISEL-X64-NEXT: andl $1, %eax 476; GISEL-X64-NEXT: retq 477; 478; SDAG-X86-LABEL: test_icmp_ule_i32: 479; SDAG-X86: ## %bb.0: 480; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 481; SDAG-X86-NEXT: xorl %eax, %eax 482; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 483; SDAG-X86-NEXT: setbe %al 484; SDAG-X86-NEXT: retl 485; 486; FAST-X86-LABEL: test_icmp_ule_i32: 487; FAST-X86: ## %bb.0: 488; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 489; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 490; FAST-X86-NEXT: setbe %al 491; FAST-X86-NEXT: andb $1, %al 492; FAST-X86-NEXT: movzbl %al, %eax 493; FAST-X86-NEXT: retl 494; 495; GISEL-X86-LABEL: test_icmp_ule_i32: 496; GISEL-X86: ## %bb.0: 497; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 498; GISEL-X86-NEXT: xorl %eax, %eax 499; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 500; GISEL-X86-NEXT: setbe %al 501; GISEL-X86-NEXT: andl $1, %eax 502; GISEL-X86-NEXT: retl 503 %r = icmp ule i32 %a, %b 504 %res = zext i1 %r to i32 505 ret i32 %res 506} 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, %eax 512; SDAG-X64-NEXT: cmpl %esi, %edi 513; SDAG-X64-NEXT: setg %al 514; SDAG-X64-NEXT: retq 515; 516; FAST-X64-LABEL: test_icmp_sgt_i32: 517; FAST-X64: ## %bb.0: 518; FAST-X64-NEXT: cmpl %esi, %edi 519; FAST-X64-NEXT: setg %al 520; FAST-X64-NEXT: andb $1, %al 521; FAST-X64-NEXT: movzbl %al, %eax 522; FAST-X64-NEXT: retq 523; 524; GISEL-X64-LABEL: test_icmp_sgt_i32: 525; GISEL-X64: ## %bb.0: 526; GISEL-X64-NEXT: xorl %eax, %eax 527; GISEL-X64-NEXT: cmpl %esi, %edi 528; GISEL-X64-NEXT: setg %al 529; GISEL-X64-NEXT: andl $1, %eax 530; GISEL-X64-NEXT: retq 531; 532; SDAG-X86-LABEL: test_icmp_sgt_i32: 533; SDAG-X86: ## %bb.0: 534; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 535; SDAG-X86-NEXT: xorl %eax, %eax 536; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 537; SDAG-X86-NEXT: setg %al 538; SDAG-X86-NEXT: retl 539; 540; FAST-X86-LABEL: test_icmp_sgt_i32: 541; FAST-X86: ## %bb.0: 542; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 543; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 544; FAST-X86-NEXT: setg %al 545; FAST-X86-NEXT: andb $1, %al 546; FAST-X86-NEXT: movzbl %al, %eax 547; FAST-X86-NEXT: retl 548; 549; GISEL-X86-LABEL: test_icmp_sgt_i32: 550; GISEL-X86: ## %bb.0: 551; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 552; GISEL-X86-NEXT: xorl %eax, %eax 553; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 554; GISEL-X86-NEXT: setg %al 555; GISEL-X86-NEXT: andl $1, %eax 556; GISEL-X86-NEXT: retl 557 %r = icmp sgt i32 %a, %b 558 %res = zext i1 %r to i32 559 ret i32 %res 560} 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, %eax 566; SDAG-X64-NEXT: cmpl %esi, %edi 567; SDAG-X64-NEXT: setge %al 568; SDAG-X64-NEXT: retq 569; 570; FAST-X64-LABEL: test_icmp_sge_i32: 571; FAST-X64: ## %bb.0: 572; FAST-X64-NEXT: cmpl %esi, %edi 573; FAST-X64-NEXT: setge %al 574; FAST-X64-NEXT: andb $1, %al 575; FAST-X64-NEXT: movzbl %al, %eax 576; FAST-X64-NEXT: retq 577; 578; GISEL-X64-LABEL: test_icmp_sge_i32: 579; GISEL-X64: ## %bb.0: 580; GISEL-X64-NEXT: xorl %eax, %eax 581; GISEL-X64-NEXT: cmpl %esi, %edi 582; GISEL-X64-NEXT: setge %al 583; GISEL-X64-NEXT: andl $1, %eax 584; GISEL-X64-NEXT: retq 585; 586; SDAG-X86-LABEL: test_icmp_sge_i32: 587; SDAG-X86: ## %bb.0: 588; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 589; SDAG-X86-NEXT: xorl %eax, %eax 590; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 591; SDAG-X86-NEXT: setge %al 592; SDAG-X86-NEXT: retl 593; 594; FAST-X86-LABEL: test_icmp_sge_i32: 595; FAST-X86: ## %bb.0: 596; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 597; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 598; FAST-X86-NEXT: setge %al 599; FAST-X86-NEXT: andb $1, %al 600; FAST-X86-NEXT: movzbl %al, %eax 601; FAST-X86-NEXT: retl 602; 603; GISEL-X86-LABEL: test_icmp_sge_i32: 604; GISEL-X86: ## %bb.0: 605; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 606; GISEL-X86-NEXT: xorl %eax, %eax 607; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 608; GISEL-X86-NEXT: setge %al 609; GISEL-X86-NEXT: andl $1, %eax 610; GISEL-X86-NEXT: retl 611 %r = icmp sge i32 %a, %b 612 %res = zext i1 %r to i32 613 ret i32 %res 614} 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, %eax 620; SDAG-X64-NEXT: cmpl %esi, %edi 621; SDAG-X64-NEXT: setl %al 622; SDAG-X64-NEXT: retq 623; 624; FAST-X64-LABEL: test_icmp_slt_i32: 625; FAST-X64: ## %bb.0: 626; FAST-X64-NEXT: cmpl %esi, %edi 627; FAST-X64-NEXT: setl %al 628; FAST-X64-NEXT: andb $1, %al 629; FAST-X64-NEXT: movzbl %al, %eax 630; FAST-X64-NEXT: retq 631; 632; GISEL-X64-LABEL: test_icmp_slt_i32: 633; GISEL-X64: ## %bb.0: 634; GISEL-X64-NEXT: xorl %eax, %eax 635; GISEL-X64-NEXT: cmpl %esi, %edi 636; GISEL-X64-NEXT: setl %al 637; GISEL-X64-NEXT: andl $1, %eax 638; GISEL-X64-NEXT: retq 639; 640; SDAG-X86-LABEL: test_icmp_slt_i32: 641; SDAG-X86: ## %bb.0: 642; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 643; SDAG-X86-NEXT: xorl %eax, %eax 644; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 645; SDAG-X86-NEXT: setl %al 646; SDAG-X86-NEXT: retl 647; 648; FAST-X86-LABEL: test_icmp_slt_i32: 649; FAST-X86: ## %bb.0: 650; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 651; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 652; FAST-X86-NEXT: setl %al 653; FAST-X86-NEXT: andb $1, %al 654; FAST-X86-NEXT: movzbl %al, %eax 655; FAST-X86-NEXT: retl 656; 657; GISEL-X86-LABEL: test_icmp_slt_i32: 658; GISEL-X86: ## %bb.0: 659; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 660; GISEL-X86-NEXT: xorl %eax, %eax 661; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 662; GISEL-X86-NEXT: setl %al 663; GISEL-X86-NEXT: andl $1, %eax 664; GISEL-X86-NEXT: retl 665 %r = icmp slt i32 %a, %b 666 %res = zext i1 %r to i32 667 ret i32 %res 668} 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, %eax 674; SDAG-X64-NEXT: cmpl %esi, %edi 675; SDAG-X64-NEXT: setle %al 676; SDAG-X64-NEXT: retq 677; 678; FAST-X64-LABEL: test_icmp_sle_i32: 679; FAST-X64: ## %bb.0: 680; FAST-X64-NEXT: cmpl %esi, %edi 681; FAST-X64-NEXT: setle %al 682; FAST-X64-NEXT: andb $1, %al 683; FAST-X64-NEXT: movzbl %al, %eax 684; FAST-X64-NEXT: retq 685; 686; GISEL-X64-LABEL: test_icmp_sle_i32: 687; GISEL-X64: ## %bb.0: 688; GISEL-X64-NEXT: xorl %eax, %eax 689; GISEL-X64-NEXT: cmpl %esi, %edi 690; GISEL-X64-NEXT: setle %al 691; GISEL-X64-NEXT: andl $1, %eax 692; GISEL-X64-NEXT: retq 693; 694; SDAG-X86-LABEL: test_icmp_sle_i32: 695; SDAG-X86: ## %bb.0: 696; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 697; SDAG-X86-NEXT: xorl %eax, %eax 698; SDAG-X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx 699; SDAG-X86-NEXT: setle %al 700; SDAG-X86-NEXT: retl 701; 702; FAST-X86-LABEL: test_icmp_sle_i32: 703; FAST-X86: ## %bb.0: 704; FAST-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 705; FAST-X86-NEXT: cmpl %eax, {{[0-9]+}}(%esp) 706; FAST-X86-NEXT: setle %al 707; FAST-X86-NEXT: andb $1, %al 708; FAST-X86-NEXT: movzbl %al, %eax 709; FAST-X86-NEXT: retl 710; 711; GISEL-X86-LABEL: test_icmp_sle_i32: 712; GISEL-X86: ## %bb.0: 713; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 714; GISEL-X86-NEXT: xorl %eax, %eax 715; GISEL-X86-NEXT: cmpl %ecx, {{[0-9]+}}(%esp) 716; GISEL-X86-NEXT: setle %al 717; GISEL-X86-NEXT: andl $1, %eax 718; GISEL-X86-NEXT: retl 719 %r = icmp sle i32 %a, %b 720 %res = zext i1 %r to i32 721 ret i32 %res 722} 723