1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X86,SDAG-X86 3; RUN: llc < %s -mtriple=i686-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86,FASTISEL-X86 4; RUN: llc < %s -mtriple=i686-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X86,GISEL-X86 5; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=X64,SDAG-X64 6; RUN: llc < %s -mtriple=x86_64-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64,FASTISEL-X64 7; RUN: llc < %s -mtriple=x86_64-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X64,GISEL-X64 8 9define i1 @and_i1(i1 %a, i1 %b) { 10; SDAG-X86-LABEL: and_i1: 11; SDAG-X86: # %bb.0: 12; SDAG-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 13; SDAG-X86-NEXT: andb {{[0-9]+}}(%esp), %al 14; SDAG-X86-NEXT: retl 15; 16; FASTISEL-X86-LABEL: and_i1: 17; FASTISEL-X86: # %bb.0: 18; FASTISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 19; FASTISEL-X86-NEXT: andb {{[0-9]+}}(%esp), %al 20; FASTISEL-X86-NEXT: retl 21; 22; GISEL-X86-LABEL: and_i1: 23; GISEL-X86: # %bb.0: 24; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 25; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 26; GISEL-X86-NEXT: andb %cl, %al 27; GISEL-X86-NEXT: # kill: def $al killed $al killed $eax 28; GISEL-X86-NEXT: retl 29; 30; SDAG-X64-LABEL: and_i1: 31; SDAG-X64: # %bb.0: 32; SDAG-X64-NEXT: movl %edi, %eax 33; SDAG-X64-NEXT: andl %esi, %eax 34; SDAG-X64-NEXT: # kill: def $al killed $al killed $eax 35; SDAG-X64-NEXT: retq 36; 37; FASTISEL-X64-LABEL: and_i1: 38; FASTISEL-X64: # %bb.0: 39; FASTISEL-X64-NEXT: movl %edi, %eax 40; FASTISEL-X64-NEXT: andb %sil, %al 41; FASTISEL-X64-NEXT: # kill: def $al killed $al killed $eax 42; FASTISEL-X64-NEXT: retq 43; 44; GISEL-X64-LABEL: and_i1: 45; GISEL-X64: # %bb.0: 46; GISEL-X64-NEXT: movl %esi, %eax 47; GISEL-X64-NEXT: andb %dil, %al 48; GISEL-X64-NEXT: # kill: def $al killed $al killed $eax 49; GISEL-X64-NEXT: retq 50 %c = and i1 %a, %b 51 ret i1 %c 52} 53define i8 @and_i8(i8 %a, i8 %b) { 54; SDAG-X86-LABEL: and_i8: 55; SDAG-X86: # %bb.0: 56; SDAG-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 57; SDAG-X86-NEXT: andb {{[0-9]+}}(%esp), %al 58; SDAG-X86-NEXT: retl 59; 60; FASTISEL-X86-LABEL: and_i8: 61; FASTISEL-X86: # %bb.0: 62; FASTISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 63; FASTISEL-X86-NEXT: andb {{[0-9]+}}(%esp), %al 64; FASTISEL-X86-NEXT: retl 65; 66; GISEL-X86-LABEL: and_i8: 67; GISEL-X86: # %bb.0: 68; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 69; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 70; GISEL-X86-NEXT: andb %cl, %al 71; GISEL-X86-NEXT: # kill: def $al killed $al killed $eax 72; GISEL-X86-NEXT: retl 73; 74; SDAG-X64-LABEL: and_i8: 75; SDAG-X64: # %bb.0: 76; SDAG-X64-NEXT: movl %edi, %eax 77; SDAG-X64-NEXT: andl %esi, %eax 78; SDAG-X64-NEXT: # kill: def $al killed $al killed $eax 79; SDAG-X64-NEXT: retq 80; 81; FASTISEL-X64-LABEL: and_i8: 82; FASTISEL-X64: # %bb.0: 83; FASTISEL-X64-NEXT: movl %edi, %eax 84; FASTISEL-X64-NEXT: andb %sil, %al 85; FASTISEL-X64-NEXT: # kill: def $al killed $al killed $eax 86; FASTISEL-X64-NEXT: retq 87; 88; GISEL-X64-LABEL: and_i8: 89; GISEL-X64: # %bb.0: 90; GISEL-X64-NEXT: movl %esi, %eax 91; GISEL-X64-NEXT: andb %dil, %al 92; GISEL-X64-NEXT: # kill: def $al killed $al killed $eax 93; GISEL-X64-NEXT: retq 94 %c = and i8 %a, %b 95 ret i8 %c 96} 97 98define i16 @and_i16(i16 %a, i16 %b) { 99; SDAG-X86-LABEL: and_i16: 100; SDAG-X86: # %bb.0: 101; SDAG-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 102; SDAG-X86-NEXT: andw {{[0-9]+}}(%esp), %ax 103; SDAG-X86-NEXT: retl 104; 105; FASTISEL-X86-LABEL: and_i16: 106; FASTISEL-X86: # %bb.0: 107; FASTISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 108; FASTISEL-X86-NEXT: andw {{[0-9]+}}(%esp), %ax 109; FASTISEL-X86-NEXT: retl 110; 111; GISEL-X86-LABEL: and_i16: 112; GISEL-X86: # %bb.0: 113; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 114; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 115; GISEL-X86-NEXT: andw %cx, %ax 116; GISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax 117; GISEL-X86-NEXT: retl 118; 119; SDAG-X64-LABEL: and_i16: 120; SDAG-X64: # %bb.0: 121; SDAG-X64-NEXT: movl %edi, %eax 122; SDAG-X64-NEXT: andl %esi, %eax 123; SDAG-X64-NEXT: # kill: def $ax killed $ax killed $eax 124; SDAG-X64-NEXT: retq 125; 126; FASTISEL-X64-LABEL: and_i16: 127; FASTISEL-X64: # %bb.0: 128; FASTISEL-X64-NEXT: movl %edi, %eax 129; FASTISEL-X64-NEXT: andw %si, %ax 130; FASTISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 131; FASTISEL-X64-NEXT: retq 132; 133; GISEL-X64-LABEL: and_i16: 134; GISEL-X64: # %bb.0: 135; GISEL-X64-NEXT: movl %esi, %eax 136; GISEL-X64-NEXT: andw %di, %ax 137; GISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 138; GISEL-X64-NEXT: retq 139 %c = and i16 %a, %b 140 ret i16 %c 141} 142 143define i32 @and_i32(i32 %a, i32 %b) { 144; X86-LABEL: and_i32: 145; X86: # %bb.0: 146; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 147; X86-NEXT: andl {{[0-9]+}}(%esp), %eax 148; X86-NEXT: retl 149; 150; SDAG-X64-LABEL: and_i32: 151; SDAG-X64: # %bb.0: 152; SDAG-X64-NEXT: movl %edi, %eax 153; SDAG-X64-NEXT: andl %esi, %eax 154; SDAG-X64-NEXT: retq 155; 156; FASTISEL-X64-LABEL: and_i32: 157; FASTISEL-X64: # %bb.0: 158; FASTISEL-X64-NEXT: movl %edi, %eax 159; FASTISEL-X64-NEXT: andl %esi, %eax 160; FASTISEL-X64-NEXT: retq 161; 162; GISEL-X64-LABEL: and_i32: 163; GISEL-X64: # %bb.0: 164; GISEL-X64-NEXT: movl %esi, %eax 165; GISEL-X64-NEXT: andl %edi, %eax 166; GISEL-X64-NEXT: retq 167 %c = and i32 %a, %b 168 ret i32 %c 169} 170 171define i64 @and_i64(i64 %a, i64 %b) nounwind { 172; SDAG-X86-LABEL: and_i64: 173; SDAG-X86: # %bb.0: 174; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 175; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 176; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 177; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %edx 178; SDAG-X86-NEXT: retl 179; 180; FASTISEL-X86-LABEL: and_i64: 181; FASTISEL-X86: # %bb.0: 182; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 183; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 184; FASTISEL-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 185; FASTISEL-X86-NEXT: andl {{[0-9]+}}(%esp), %edx 186; FASTISEL-X86-NEXT: retl 187; 188; GISEL-X86-LABEL: and_i64: 189; GISEL-X86: # %bb.0: 190; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 191; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 192; GISEL-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 193; GISEL-X86-NEXT: andl {{[0-9]+}}(%esp), %edx 194; GISEL-X86-NEXT: retl 195; 196; SDAG-X64-LABEL: and_i64: 197; SDAG-X64: # %bb.0: 198; SDAG-X64-NEXT: movq %rdi, %rax 199; SDAG-X64-NEXT: andq %rsi, %rax 200; SDAG-X64-NEXT: retq 201; 202; FASTISEL-X64-LABEL: and_i64: 203; FASTISEL-X64: # %bb.0: 204; FASTISEL-X64-NEXT: movq %rdi, %rax 205; FASTISEL-X64-NEXT: andq %rsi, %rax 206; FASTISEL-X64-NEXT: retq 207; 208; GISEL-X64-LABEL: and_i64: 209; GISEL-X64: # %bb.0: 210; GISEL-X64-NEXT: movq %rsi, %rax 211; GISEL-X64-NEXT: andq %rdi, %rax 212; GISEL-X64-NEXT: retq 213 %c = and i64 %a, %b 214 ret i64 %c 215} 216 217define i8 @and_imm8_i8(i8 %a) { 218; SDAG-X86-LABEL: and_imm8_i8: 219; SDAG-X86: # %bb.0: 220; SDAG-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 221; SDAG-X86-NEXT: andb $1, %al 222; SDAG-X86-NEXT: retl 223; 224; FASTISEL-X86-LABEL: and_imm8_i8: 225; FASTISEL-X86: # %bb.0: 226; FASTISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax 227; FASTISEL-X86-NEXT: andb $1, %al 228; FASTISEL-X86-NEXT: retl 229; 230; GISEL-X86-LABEL: and_imm8_i8: 231; GISEL-X86: # %bb.0: 232; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 233; GISEL-X86-NEXT: andb $1, %al 234; GISEL-X86-NEXT: # kill: def $al killed $al killed $eax 235; GISEL-X86-NEXT: retl 236; 237; X64-LABEL: and_imm8_i8: 238; X64: # %bb.0: 239; X64-NEXT: movl %edi, %eax 240; X64-NEXT: andb $1, %al 241; X64-NEXT: # kill: def $al killed $al killed $eax 242; X64-NEXT: retq 243 %c = and i8 %a, 1 244 ret i8 %c 245} 246 247define i16 @and_imm8_i16(i16 %a) { 248; SDAG-X86-LABEL: and_imm8_i16: 249; SDAG-X86: # %bb.0: 250; SDAG-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 251; SDAG-X86-NEXT: andl $6, %eax 252; SDAG-X86-NEXT: # kill: def $ax killed $ax killed $eax 253; SDAG-X86-NEXT: retl 254; 255; FASTISEL-X86-LABEL: and_imm8_i16: 256; FASTISEL-X86: # %bb.0: 257; FASTISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 258; FASTISEL-X86-NEXT: andw $6, %ax 259; FASTISEL-X86-NEXT: retl 260; 261; GISEL-X86-LABEL: and_imm8_i16: 262; GISEL-X86: # %bb.0: 263; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 264; GISEL-X86-NEXT: andw $6, %ax 265; GISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax 266; GISEL-X86-NEXT: retl 267; 268; SDAG-X64-LABEL: and_imm8_i16: 269; SDAG-X64: # %bb.0: 270; SDAG-X64-NEXT: movl %edi, %eax 271; SDAG-X64-NEXT: andl $6, %eax 272; SDAG-X64-NEXT: # kill: def $ax killed $ax killed $eax 273; SDAG-X64-NEXT: retq 274; 275; FASTISEL-X64-LABEL: and_imm8_i16: 276; FASTISEL-X64: # %bb.0: 277; FASTISEL-X64-NEXT: movl %edi, %eax 278; FASTISEL-X64-NEXT: andw $6, %ax 279; FASTISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 280; FASTISEL-X64-NEXT: retq 281; 282; GISEL-X64-LABEL: and_imm8_i16: 283; GISEL-X64: # %bb.0: 284; GISEL-X64-NEXT: movl %edi, %eax 285; GISEL-X64-NEXT: andw $6, %ax 286; GISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 287; GISEL-X64-NEXT: retq 288 %c = and i16 %a, 6 289 ret i16 %c 290} 291 292define i32 @and_imm8_i32(i32 %a) { 293; X86-LABEL: and_imm8_i32: 294; X86: # %bb.0: 295; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 296; X86-NEXT: andl $-5, %eax 297; X86-NEXT: retl 298; 299; X64-LABEL: and_imm8_i32: 300; X64: # %bb.0: 301; X64-NEXT: movl %edi, %eax 302; X64-NEXT: andl $-5, %eax 303; X64-NEXT: retq 304 %c = and i32 %a, -5 305 ret i32 %c 306} 307 308define i64 @and_imm8_i64(i64 %a) { 309; SDAG-X86-LABEL: and_imm8_i64: 310; SDAG-X86: # %bb.0: 311; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 312; SDAG-X86-NEXT: andl $1, %eax 313; SDAG-X86-NEXT: xorl %edx, %edx 314; SDAG-X86-NEXT: retl 315; 316; FASTISEL-X86-LABEL: and_imm8_i64: 317; FASTISEL-X86: # %bb.0: 318; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 319; FASTISEL-X86-NEXT: andl $1, %eax 320; FASTISEL-X86-NEXT: xorl %edx, %edx 321; FASTISEL-X86-NEXT: retl 322; 323; GISEL-X86-LABEL: and_imm8_i64: 324; GISEL-X86: # %bb.0: 325; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 326; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 327; GISEL-X86-NEXT: andl $1, %eax 328; GISEL-X86-NEXT: andl $0, %edx 329; GISEL-X86-NEXT: retl 330; 331; SDAG-X64-LABEL: and_imm8_i64: 332; SDAG-X64: # %bb.0: 333; SDAG-X64-NEXT: movq %rdi, %rax 334; SDAG-X64-NEXT: andl $1, %eax 335; SDAG-X64-NEXT: retq 336; 337; FASTISEL-X64-LABEL: and_imm8_i64: 338; FASTISEL-X64: # %bb.0: 339; FASTISEL-X64-NEXT: movq %rdi, %rax 340; FASTISEL-X64-NEXT: andq $1, %rax 341; FASTISEL-X64-NEXT: retq 342; 343; GISEL-X64-LABEL: and_imm8_i64: 344; GISEL-X64: # %bb.0: 345; GISEL-X64-NEXT: movq %rdi, %rax 346; GISEL-X64-NEXT: andq $1, %rax 347; GISEL-X64-NEXT: retq 348 %c = and i64 %a, 1 349 ret i64 %c 350} 351 352define i16 @and_imm16_i16(i16 %a) { 353; SDAG-X86-LABEL: and_imm16_i16: 354; SDAG-X86: # %bb.0: 355; SDAG-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 356; SDAG-X86-NEXT: andl $1023, %eax # imm = 0x3FF 357; SDAG-X86-NEXT: # kill: def $ax killed $ax killed $eax 358; SDAG-X86-NEXT: retl 359; 360; FASTISEL-X86-LABEL: and_imm16_i16: 361; FASTISEL-X86: # %bb.0: 362; FASTISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax 363; FASTISEL-X86-NEXT: andw $1023, %ax # imm = 0x3FF 364; FASTISEL-X86-NEXT: retl 365; 366; GISEL-X86-LABEL: and_imm16_i16: 367; GISEL-X86: # %bb.0: 368; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 369; GISEL-X86-NEXT: andw $1023, %ax # imm = 0x3FF 370; GISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax 371; GISEL-X86-NEXT: retl 372; 373; SDAG-X64-LABEL: and_imm16_i16: 374; SDAG-X64: # %bb.0: 375; SDAG-X64-NEXT: movl %edi, %eax 376; SDAG-X64-NEXT: andl $1023, %eax # imm = 0x3FF 377; SDAG-X64-NEXT: # kill: def $ax killed $ax killed $eax 378; SDAG-X64-NEXT: retq 379; 380; FASTISEL-X64-LABEL: and_imm16_i16: 381; FASTISEL-X64: # %bb.0: 382; FASTISEL-X64-NEXT: movl %edi, %eax 383; FASTISEL-X64-NEXT: andw $1023, %ax # imm = 0x3FF 384; FASTISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 385; FASTISEL-X64-NEXT: retq 386; 387; GISEL-X64-LABEL: and_imm16_i16: 388; GISEL-X64: # %bb.0: 389; GISEL-X64-NEXT: movl %edi, %eax 390; GISEL-X64-NEXT: andw $1023, %ax # imm = 0x3FF 391; GISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax 392; GISEL-X64-NEXT: retq 393 %c = and i16 %a, 1023 394 ret i16 %c 395} 396 397define i32 @and_imm16_i32(i32 %a) { 398; SDAG-X86-LABEL: and_imm16_i32: 399; SDAG-X86: # %bb.0: 400; SDAG-X86-NEXT: movl $2044, %eax # imm = 0x7FC 401; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 402; SDAG-X86-NEXT: retl 403; 404; FASTISEL-X86-LABEL: and_imm16_i32: 405; FASTISEL-X86: # %bb.0: 406; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 407; FASTISEL-X86-NEXT: andl $2044, %eax # imm = 0x7FC 408; FASTISEL-X86-NEXT: retl 409; 410; GISEL-X86-LABEL: and_imm16_i32: 411; GISEL-X86: # %bb.0: 412; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 413; GISEL-X86-NEXT: andl $2044, %eax # imm = 0x7FC 414; GISEL-X86-NEXT: retl 415; 416; X64-LABEL: and_imm16_i32: 417; X64: # %bb.0: 418; X64-NEXT: movl %edi, %eax 419; X64-NEXT: andl $2044, %eax # imm = 0x7FC 420; X64-NEXT: retq 421 %c = and i32 %a, 2044 422 ret i32 %c 423} 424 425define i64 @and_imm16_i64(i64 %a) { 426; SDAG-X86-LABEL: and_imm16_i64: 427; SDAG-X86: # %bb.0: 428; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 429; SDAG-X86-NEXT: movl $-5022, %eax # imm = 0xEC62 430; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 431; SDAG-X86-NEXT: retl 432; 433; FASTISEL-X86-LABEL: and_imm16_i64: 434; FASTISEL-X86: # %bb.0: 435; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 436; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 437; FASTISEL-X86-NEXT: andl $-5022, %eax # imm = 0xEC62 438; FASTISEL-X86-NEXT: retl 439; 440; GISEL-X86-LABEL: and_imm16_i64: 441; GISEL-X86: # %bb.0: 442; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 443; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 444; GISEL-X86-NEXT: andl $-5022, %eax # imm = 0xEC62 445; GISEL-X86-NEXT: andl $-1, %edx 446; GISEL-X86-NEXT: retl 447; 448; X64-LABEL: and_imm16_i64: 449; X64: # %bb.0: 450; X64-NEXT: movq %rdi, %rax 451; X64-NEXT: andq $-5022, %rax # imm = 0xEC62 452; X64-NEXT: retq 453 %c = and i64 %a, -5022 454 ret i64 %c 455} 456 457define i32 @and_imm32_i32(i32 %a) { 458; SDAG-X86-LABEL: and_imm32_i32: 459; SDAG-X86: # %bb.0: 460; SDAG-X86-NEXT: movl $85538, %eax # imm = 0x14E22 461; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 462; SDAG-X86-NEXT: retl 463; 464; FASTISEL-X86-LABEL: and_imm32_i32: 465; FASTISEL-X86: # %bb.0: 466; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 467; FASTISEL-X86-NEXT: andl $85538, %eax # imm = 0x14E22 468; FASTISEL-X86-NEXT: retl 469; 470; GISEL-X86-LABEL: and_imm32_i32: 471; GISEL-X86: # %bb.0: 472; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 473; GISEL-X86-NEXT: andl $85538, %eax # imm = 0x14E22 474; GISEL-X86-NEXT: retl 475; 476; X64-LABEL: and_imm32_i32: 477; X64: # %bb.0: 478; X64-NEXT: movl %edi, %eax 479; X64-NEXT: andl $85538, %eax # imm = 0x14E22 480; X64-NEXT: retq 481 %c = and i32 %a, 85538 482 ret i32 %c 483} 484 485define i64 @and_imm32_i64(i64 %a) { 486; SDAG-X86-LABEL: and_imm32_i64: 487; SDAG-X86: # %bb.0: 488; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 489; SDAG-X86-NEXT: movl $-125778, %eax # imm = 0xFFFE14AE 490; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 491; SDAG-X86-NEXT: retl 492; 493; FASTISEL-X86-LABEL: and_imm32_i64: 494; FASTISEL-X86: # %bb.0: 495; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 496; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 497; FASTISEL-X86-NEXT: andl $-125778, %eax # imm = 0xFFFE14AE 498; FASTISEL-X86-NEXT: retl 499; 500; GISEL-X86-LABEL: and_imm32_i64: 501; GISEL-X86: # %bb.0: 502; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 503; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 504; GISEL-X86-NEXT: andl $-125778, %eax # imm = 0xFFFE14AE 505; GISEL-X86-NEXT: andl $-1, %edx 506; GISEL-X86-NEXT: retl 507; 508; X64-LABEL: and_imm32_i64: 509; X64: # %bb.0: 510; X64-NEXT: movq %rdi, %rax 511; X64-NEXT: andq $-125778, %rax # imm = 0xFFFE14AE 512; X64-NEXT: retq 513 %c = and i64 %a, -125778 514 ret i64 %c 515} 516 517define i64 @and_imm64_i64(i64 %a) { 518; SDAG-X86-LABEL: and_imm64_i64: 519; SDAG-X86: # %bb.0: 520; SDAG-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 521; SDAG-X86-NEXT: movl $-1850691612, %eax # imm = 0x91B0AFE4 522; SDAG-X86-NEXT: andl {{[0-9]+}}(%esp), %eax 523; SDAG-X86-NEXT: andl $-2, %edx 524; SDAG-X86-NEXT: retl 525; 526; FASTISEL-X86-LABEL: and_imm64_i64: 527; FASTISEL-X86: # %bb.0: 528; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 529; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 530; FASTISEL-X86-NEXT: andl $-1850691612, %eax # imm = 0x91B0AFE4 531; FASTISEL-X86-NEXT: andl $-2, %edx 532; FASTISEL-X86-NEXT: retl 533; 534; GISEL-X86-LABEL: and_imm64_i64: 535; GISEL-X86: # %bb.0: 536; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax 537; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx 538; GISEL-X86-NEXT: andl $-1850691612, %eax # imm = 0x91B0AFE4 539; GISEL-X86-NEXT: andl $-2, %edx 540; GISEL-X86-NEXT: retl 541; 542; X64-LABEL: and_imm64_i64: 543; X64: # %bb.0: 544; X64-NEXT: movabsq $-6145658908, %rax # imm = 0xFFFFFFFE91B0AFE4 545; X64-NEXT: andq %rdi, %rax 546; X64-NEXT: retq 547 %c = and i64 %a, -6145658908 548 ret i64 %c 549} 550