1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=CHECK-LINUX64 3; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s --check-prefix=CHECK-WIN32-64 4; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefix=CHECK-X86 5 6define void @g64xh(i64 inreg %x) nounwind { 7; CHECK-LINUX64-LABEL: g64xh: 8; CHECK-LINUX64: # %bb.0: 9; CHECK-LINUX64-NEXT: testl $2048, %edi # imm = 0x800 10; CHECK-LINUX64-NEXT: jne .LBB0_2 11; CHECK-LINUX64-NEXT: # %bb.1: # %yes 12; CHECK-LINUX64-NEXT: pushq %rax 13; CHECK-LINUX64-NEXT: callq bar 14; CHECK-LINUX64-NEXT: popq %rax 15; CHECK-LINUX64-NEXT: .LBB0_2: # %no 16; CHECK-LINUX64-NEXT: retq 17; 18; CHECK-WIN32-64-LABEL: g64xh: 19; CHECK-WIN32-64: # %bb.0: 20; CHECK-WIN32-64-NEXT: subq $40, %rsp 21; CHECK-WIN32-64-NEXT: testl $2048, %ecx # imm = 0x800 22; CHECK-WIN32-64-NEXT: jne .LBB0_2 23; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 24; CHECK-WIN32-64-NEXT: callq bar 25; CHECK-WIN32-64-NEXT: .LBB0_2: # %no 26; CHECK-WIN32-64-NEXT: addq $40, %rsp 27; CHECK-WIN32-64-NEXT: retq 28; 29; CHECK-X86-LABEL: g64xh: 30; CHECK-X86: # %bb.0: 31; CHECK-X86-NEXT: testl $2048, %eax # imm = 0x800 32; CHECK-X86-NEXT: jne .LBB0_2 33; CHECK-X86-NEXT: # %bb.1: # %yes 34; CHECK-X86-NEXT: calll bar 35; CHECK-X86-NEXT: .LBB0_2: # %no 36; CHECK-X86-NEXT: retl 37 %t = and i64 %x, 2048 38 %s = icmp eq i64 %t, 0 39 br i1 %s, label %yes, label %no 40 41yes: 42 call void @bar() 43 ret void 44no: 45 ret void 46} 47 48define void @g64xl(i64 inreg %x) nounwind { 49; CHECK-LINUX64-LABEL: g64xl: 50; CHECK-LINUX64: # %bb.0: 51; CHECK-LINUX64-NEXT: testb $8, %dil 52; CHECK-LINUX64-NEXT: jne .LBB1_2 53; CHECK-LINUX64-NEXT: # %bb.1: # %yes 54; CHECK-LINUX64-NEXT: pushq %rax 55; CHECK-LINUX64-NEXT: callq bar 56; CHECK-LINUX64-NEXT: popq %rax 57; CHECK-LINUX64-NEXT: .LBB1_2: # %no 58; CHECK-LINUX64-NEXT: retq 59; 60; CHECK-WIN32-64-LABEL: g64xl: 61; CHECK-WIN32-64: # %bb.0: 62; CHECK-WIN32-64-NEXT: subq $40, %rsp 63; CHECK-WIN32-64-NEXT: testb $8, %cl 64; CHECK-WIN32-64-NEXT: jne .LBB1_2 65; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 66; CHECK-WIN32-64-NEXT: callq bar 67; CHECK-WIN32-64-NEXT: .LBB1_2: # %no 68; CHECK-WIN32-64-NEXT: addq $40, %rsp 69; CHECK-WIN32-64-NEXT: retq 70; 71; CHECK-X86-LABEL: g64xl: 72; CHECK-X86: # %bb.0: 73; CHECK-X86-NEXT: testb $8, %al 74; CHECK-X86-NEXT: jne .LBB1_2 75; CHECK-X86-NEXT: # %bb.1: # %yes 76; CHECK-X86-NEXT: calll bar 77; CHECK-X86-NEXT: .LBB1_2: # %no 78; CHECK-X86-NEXT: retl 79 %t = and i64 %x, 8 80 %s = icmp eq i64 %t, 0 81 br i1 %s, label %yes, label %no 82 83yes: 84 call void @bar() 85 ret void 86no: 87 ret void 88} 89 90define void @g32xh(i32 inreg %x) nounwind { 91; CHECK-LINUX64-LABEL: g32xh: 92; CHECK-LINUX64: # %bb.0: 93; CHECK-LINUX64-NEXT: testl $2048, %edi # imm = 0x800 94; CHECK-LINUX64-NEXT: jne .LBB2_2 95; CHECK-LINUX64-NEXT: # %bb.1: # %yes 96; CHECK-LINUX64-NEXT: pushq %rax 97; CHECK-LINUX64-NEXT: callq bar 98; CHECK-LINUX64-NEXT: popq %rax 99; CHECK-LINUX64-NEXT: .LBB2_2: # %no 100; CHECK-LINUX64-NEXT: retq 101; 102; CHECK-WIN32-64-LABEL: g32xh: 103; CHECK-WIN32-64: # %bb.0: 104; CHECK-WIN32-64-NEXT: subq $40, %rsp 105; CHECK-WIN32-64-NEXT: testl $2048, %ecx # imm = 0x800 106; CHECK-WIN32-64-NEXT: jne .LBB2_2 107; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 108; CHECK-WIN32-64-NEXT: callq bar 109; CHECK-WIN32-64-NEXT: .LBB2_2: # %no 110; CHECK-WIN32-64-NEXT: addq $40, %rsp 111; CHECK-WIN32-64-NEXT: retq 112; 113; CHECK-X86-LABEL: g32xh: 114; CHECK-X86: # %bb.0: 115; CHECK-X86-NEXT: testl $2048, %eax # imm = 0x800 116; CHECK-X86-NEXT: jne .LBB2_2 117; CHECK-X86-NEXT: # %bb.1: # %yes 118; CHECK-X86-NEXT: calll bar 119; CHECK-X86-NEXT: .LBB2_2: # %no 120; CHECK-X86-NEXT: retl 121 %t = and i32 %x, 2048 122 %s = icmp eq i32 %t, 0 123 br i1 %s, label %yes, label %no 124 125yes: 126 call void @bar() 127 ret void 128no: 129 ret void 130} 131 132define void @g32xl(i32 inreg %x) nounwind { 133; CHECK-LINUX64-LABEL: g32xl: 134; CHECK-LINUX64: # %bb.0: 135; CHECK-LINUX64-NEXT: testb $8, %dil 136; CHECK-LINUX64-NEXT: jne .LBB3_2 137; CHECK-LINUX64-NEXT: # %bb.1: # %yes 138; CHECK-LINUX64-NEXT: pushq %rax 139; CHECK-LINUX64-NEXT: callq bar 140; CHECK-LINUX64-NEXT: popq %rax 141; CHECK-LINUX64-NEXT: .LBB3_2: # %no 142; CHECK-LINUX64-NEXT: retq 143; 144; CHECK-WIN32-64-LABEL: g32xl: 145; CHECK-WIN32-64: # %bb.0: 146; CHECK-WIN32-64-NEXT: subq $40, %rsp 147; CHECK-WIN32-64-NEXT: testb $8, %cl 148; CHECK-WIN32-64-NEXT: jne .LBB3_2 149; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 150; CHECK-WIN32-64-NEXT: callq bar 151; CHECK-WIN32-64-NEXT: .LBB3_2: # %no 152; CHECK-WIN32-64-NEXT: addq $40, %rsp 153; CHECK-WIN32-64-NEXT: retq 154; 155; CHECK-X86-LABEL: g32xl: 156; CHECK-X86: # %bb.0: 157; CHECK-X86-NEXT: testb $8, %al 158; CHECK-X86-NEXT: jne .LBB3_2 159; CHECK-X86-NEXT: # %bb.1: # %yes 160; CHECK-X86-NEXT: calll bar 161; CHECK-X86-NEXT: .LBB3_2: # %no 162; CHECK-X86-NEXT: retl 163 %t = and i32 %x, 8 164 %s = icmp eq i32 %t, 0 165 br i1 %s, label %yes, label %no 166 167yes: 168 call void @bar() 169 ret void 170no: 171 ret void 172} 173 174define void @g16xh(i16 inreg %x) nounwind { 175; CHECK-LINUX64-LABEL: g16xh: 176; CHECK-LINUX64: # %bb.0: 177; CHECK-LINUX64-NEXT: testl $2048, %edi # imm = 0x800 178; CHECK-LINUX64-NEXT: jne .LBB4_2 179; CHECK-LINUX64-NEXT: # %bb.1: # %yes 180; CHECK-LINUX64-NEXT: pushq %rax 181; CHECK-LINUX64-NEXT: callq bar 182; CHECK-LINUX64-NEXT: popq %rax 183; CHECK-LINUX64-NEXT: .LBB4_2: # %no 184; CHECK-LINUX64-NEXT: retq 185; 186; CHECK-WIN32-64-LABEL: g16xh: 187; CHECK-WIN32-64: # %bb.0: 188; CHECK-WIN32-64-NEXT: subq $40, %rsp 189; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx 190; CHECK-WIN32-64-NEXT: testl $2048, %ecx # imm = 0x800 191; CHECK-WIN32-64-NEXT: jne .LBB4_2 192; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 193; CHECK-WIN32-64-NEXT: callq bar 194; CHECK-WIN32-64-NEXT: .LBB4_2: # %no 195; CHECK-WIN32-64-NEXT: addq $40, %rsp 196; CHECK-WIN32-64-NEXT: retq 197; 198; CHECK-X86-LABEL: g16xh: 199; CHECK-X86: # %bb.0: 200; CHECK-X86-NEXT: testl $2048, %eax # imm = 0x800 201; CHECK-X86-NEXT: jne .LBB4_2 202; CHECK-X86-NEXT: # %bb.1: # %yes 203; CHECK-X86-NEXT: calll bar 204; CHECK-X86-NEXT: .LBB4_2: # %no 205; CHECK-X86-NEXT: retl 206 %t = and i16 %x, 2048 207 %s = icmp eq i16 %t, 0 208 br i1 %s, label %yes, label %no 209 210yes: 211 call void @bar() 212 ret void 213no: 214 ret void 215} 216 217define void @g16xl(i16 inreg %x) nounwind { 218; CHECK-LINUX64-LABEL: g16xl: 219; CHECK-LINUX64: # %bb.0: 220; CHECK-LINUX64-NEXT: testb $8, %dil 221; CHECK-LINUX64-NEXT: jne .LBB5_2 222; CHECK-LINUX64-NEXT: # %bb.1: # %yes 223; CHECK-LINUX64-NEXT: pushq %rax 224; CHECK-LINUX64-NEXT: callq bar 225; CHECK-LINUX64-NEXT: popq %rax 226; CHECK-LINUX64-NEXT: .LBB5_2: # %no 227; CHECK-LINUX64-NEXT: retq 228; 229; CHECK-WIN32-64-LABEL: g16xl: 230; CHECK-WIN32-64: # %bb.0: 231; CHECK-WIN32-64-NEXT: subq $40, %rsp 232; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx 233; CHECK-WIN32-64-NEXT: testb $8, %cl 234; CHECK-WIN32-64-NEXT: jne .LBB5_2 235; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 236; CHECK-WIN32-64-NEXT: callq bar 237; CHECK-WIN32-64-NEXT: .LBB5_2: # %no 238; CHECK-WIN32-64-NEXT: addq $40, %rsp 239; CHECK-WIN32-64-NEXT: retq 240; 241; CHECK-X86-LABEL: g16xl: 242; CHECK-X86: # %bb.0: 243; CHECK-X86-NEXT: testb $8, %al 244; CHECK-X86-NEXT: jne .LBB5_2 245; CHECK-X86-NEXT: # %bb.1: # %yes 246; CHECK-X86-NEXT: calll bar 247; CHECK-X86-NEXT: .LBB5_2: # %no 248; CHECK-X86-NEXT: retl 249 %t = and i16 %x, 8 250 %s = icmp eq i16 %t, 0 251 br i1 %s, label %yes, label %no 252 253yes: 254 call void @bar() 255 ret void 256no: 257 ret void 258} 259 260define void @g64x16(i64 inreg %x) nounwind { 261; CHECK-LINUX64-LABEL: g64x16: 262; CHECK-LINUX64: # %bb.0: 263; CHECK-LINUX64-NEXT: testl $32896, %edi # imm = 0x8080 264; CHECK-LINUX64-NEXT: je .LBB6_1 265; CHECK-LINUX64-NEXT: # %bb.2: # %no 266; CHECK-LINUX64-NEXT: retq 267; CHECK-LINUX64-NEXT: .LBB6_1: # %yes 268; CHECK-LINUX64-NEXT: pushq %rax 269; CHECK-LINUX64-NEXT: callq bar 270; CHECK-LINUX64-NEXT: popq %rax 271; CHECK-LINUX64-NEXT: retq 272; 273; CHECK-WIN32-64-LABEL: g64x16: 274; CHECK-WIN32-64: # %bb.0: 275; CHECK-WIN32-64-NEXT: subq $40, %rsp 276; CHECK-WIN32-64-NEXT: testl $32896, %ecx # imm = 0x8080 277; CHECK-WIN32-64-NEXT: je .LBB6_1 278; CHECK-WIN32-64-NEXT: # %bb.2: # %no 279; CHECK-WIN32-64-NEXT: addq $40, %rsp 280; CHECK-WIN32-64-NEXT: retq 281; CHECK-WIN32-64-NEXT: .LBB6_1: # %yes 282; CHECK-WIN32-64-NEXT: callq bar 283; CHECK-WIN32-64-NEXT: addq $40, %rsp 284; CHECK-WIN32-64-NEXT: retq 285; 286; CHECK-X86-LABEL: g64x16: 287; CHECK-X86: # %bb.0: 288; CHECK-X86-NEXT: testl $32896, %eax # imm = 0x8080 289; CHECK-X86-NEXT: je .LBB6_1 290; CHECK-X86-NEXT: # %bb.2: # %no 291; CHECK-X86-NEXT: retl 292; CHECK-X86-NEXT: .LBB6_1: # %yes 293; CHECK-X86-NEXT: calll bar 294; CHECK-X86-NEXT: retl 295 %t = and i64 %x, 32896 296 %s = icmp eq i64 %t, 0 297 br i1 %s, label %yes, label %no 298 299yes: 300 call void @bar() 301 ret void 302no: 303 ret void 304} 305 306define void @g64x16minsize(i64 inreg %x) nounwind minsize { 307; CHECK-LINUX64-LABEL: g64x16minsize: 308; CHECK-LINUX64: # %bb.0: 309; CHECK-LINUX64-NEXT: testw $-32640, %di # imm = 0x8080 310; CHECK-LINUX64-NEXT: je .LBB7_1 311; CHECK-LINUX64-NEXT: # %bb.2: # %no 312; CHECK-LINUX64-NEXT: retq 313; CHECK-LINUX64-NEXT: .LBB7_1: # %yes 314; CHECK-LINUX64-NEXT: pushq %rax 315; CHECK-LINUX64-NEXT: callq bar 316; CHECK-LINUX64-NEXT: popq %rax 317; CHECK-LINUX64-NEXT: retq 318; 319; CHECK-WIN32-64-LABEL: g64x16minsize: 320; CHECK-WIN32-64: # %bb.0: 321; CHECK-WIN32-64-NEXT: subq $40, %rsp 322; CHECK-WIN32-64-NEXT: testw $-32640, %cx # imm = 0x8080 323; CHECK-WIN32-64-NEXT: jne .LBB7_2 324; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 325; CHECK-WIN32-64-NEXT: callq bar 326; CHECK-WIN32-64-NEXT: .LBB7_2: # %no 327; CHECK-WIN32-64-NEXT: addq $40, %rsp 328; CHECK-WIN32-64-NEXT: retq 329; 330; CHECK-X86-LABEL: g64x16minsize: 331; CHECK-X86: # %bb.0: 332; CHECK-X86-NEXT: testw $-32640, %ax # imm = 0x8080 333; CHECK-X86-NEXT: je .LBB7_1 334; CHECK-X86-NEXT: # %bb.2: # %no 335; CHECK-X86-NEXT: retl 336; CHECK-X86-NEXT: .LBB7_1: # %yes 337; CHECK-X86-NEXT: calll bar 338; CHECK-X86-NEXT: retl 339 %t = and i64 %x, 32896 340 %s = icmp eq i64 %t, 0 341 br i1 %s, label %yes, label %no 342 343yes: 344 call void @bar() 345 ret void 346no: 347 ret void 348} 349 350define void @g32x16(i32 inreg %x) nounwind { 351; CHECK-LINUX64-LABEL: g32x16: 352; CHECK-LINUX64: # %bb.0: 353; CHECK-LINUX64-NEXT: testl $32896, %edi # imm = 0x8080 354; CHECK-LINUX64-NEXT: je .LBB8_1 355; CHECK-LINUX64-NEXT: # %bb.2: # %no 356; CHECK-LINUX64-NEXT: retq 357; CHECK-LINUX64-NEXT: .LBB8_1: # %yes 358; CHECK-LINUX64-NEXT: pushq %rax 359; CHECK-LINUX64-NEXT: callq bar 360; CHECK-LINUX64-NEXT: popq %rax 361; CHECK-LINUX64-NEXT: retq 362; 363; CHECK-WIN32-64-LABEL: g32x16: 364; CHECK-WIN32-64: # %bb.0: 365; CHECK-WIN32-64-NEXT: subq $40, %rsp 366; CHECK-WIN32-64-NEXT: testl $32896, %ecx # imm = 0x8080 367; CHECK-WIN32-64-NEXT: je .LBB8_1 368; CHECK-WIN32-64-NEXT: # %bb.2: # %no 369; CHECK-WIN32-64-NEXT: addq $40, %rsp 370; CHECK-WIN32-64-NEXT: retq 371; CHECK-WIN32-64-NEXT: .LBB8_1: # %yes 372; CHECK-WIN32-64-NEXT: callq bar 373; CHECK-WIN32-64-NEXT: addq $40, %rsp 374; CHECK-WIN32-64-NEXT: retq 375; 376; CHECK-X86-LABEL: g32x16: 377; CHECK-X86: # %bb.0: 378; CHECK-X86-NEXT: testl $32896, %eax # imm = 0x8080 379; CHECK-X86-NEXT: je .LBB8_1 380; CHECK-X86-NEXT: # %bb.2: # %no 381; CHECK-X86-NEXT: retl 382; CHECK-X86-NEXT: .LBB8_1: # %yes 383; CHECK-X86-NEXT: calll bar 384; CHECK-X86-NEXT: retl 385 %t = and i32 %x, 32896 386 %s = icmp eq i32 %t, 0 387 br i1 %s, label %yes, label %no 388 389yes: 390 call void @bar() 391 ret void 392no: 393 ret void 394} 395 396define void @g32x16minsize(i32 inreg %x) nounwind minsize { 397; CHECK-LINUX64-LABEL: g32x16minsize: 398; CHECK-LINUX64: # %bb.0: 399; CHECK-LINUX64-NEXT: testw $-32640, %di # imm = 0x8080 400; CHECK-LINUX64-NEXT: je .LBB9_1 401; CHECK-LINUX64-NEXT: # %bb.2: # %no 402; CHECK-LINUX64-NEXT: retq 403; CHECK-LINUX64-NEXT: .LBB9_1: # %yes 404; CHECK-LINUX64-NEXT: pushq %rax 405; CHECK-LINUX64-NEXT: callq bar 406; CHECK-LINUX64-NEXT: popq %rax 407; CHECK-LINUX64-NEXT: retq 408; 409; CHECK-WIN32-64-LABEL: g32x16minsize: 410; CHECK-WIN32-64: # %bb.0: 411; CHECK-WIN32-64-NEXT: subq $40, %rsp 412; CHECK-WIN32-64-NEXT: testw $-32640, %cx # imm = 0x8080 413; CHECK-WIN32-64-NEXT: jne .LBB9_2 414; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 415; CHECK-WIN32-64-NEXT: callq bar 416; CHECK-WIN32-64-NEXT: .LBB9_2: # %no 417; CHECK-WIN32-64-NEXT: addq $40, %rsp 418; CHECK-WIN32-64-NEXT: retq 419; 420; CHECK-X86-LABEL: g32x16minsize: 421; CHECK-X86: # %bb.0: 422; CHECK-X86-NEXT: testw $-32640, %ax # imm = 0x8080 423; CHECK-X86-NEXT: je .LBB9_1 424; CHECK-X86-NEXT: # %bb.2: # %no 425; CHECK-X86-NEXT: retl 426; CHECK-X86-NEXT: .LBB9_1: # %yes 427; CHECK-X86-NEXT: calll bar 428; CHECK-X86-NEXT: retl 429 %t = and i32 %x, 32896 430 %s = icmp eq i32 %t, 0 431 br i1 %s, label %yes, label %no 432 433yes: 434 call void @bar() 435 ret void 436no: 437 ret void 438} 439 440define void @g64x32(i64 inreg %x) nounwind { 441; CHECK-LINUX64-LABEL: g64x32: 442; CHECK-LINUX64: # %bb.0: 443; CHECK-LINUX64-NEXT: testl $268468352, %edi # imm = 0x10008080 444; CHECK-LINUX64-NEXT: je .LBB10_1 445; CHECK-LINUX64-NEXT: # %bb.2: # %no 446; CHECK-LINUX64-NEXT: retq 447; CHECK-LINUX64-NEXT: .LBB10_1: # %yes 448; CHECK-LINUX64-NEXT: pushq %rax 449; CHECK-LINUX64-NEXT: callq bar 450; CHECK-LINUX64-NEXT: popq %rax 451; CHECK-LINUX64-NEXT: retq 452; 453; CHECK-WIN32-64-LABEL: g64x32: 454; CHECK-WIN32-64: # %bb.0: 455; CHECK-WIN32-64-NEXT: subq $40, %rsp 456; CHECK-WIN32-64-NEXT: testl $268468352, %ecx # imm = 0x10008080 457; CHECK-WIN32-64-NEXT: je .LBB10_1 458; CHECK-WIN32-64-NEXT: # %bb.2: # %no 459; CHECK-WIN32-64-NEXT: addq $40, %rsp 460; CHECK-WIN32-64-NEXT: retq 461; CHECK-WIN32-64-NEXT: .LBB10_1: # %yes 462; CHECK-WIN32-64-NEXT: callq bar 463; CHECK-WIN32-64-NEXT: addq $40, %rsp 464; CHECK-WIN32-64-NEXT: retq 465; 466; CHECK-X86-LABEL: g64x32: 467; CHECK-X86: # %bb.0: 468; CHECK-X86-NEXT: testl $268468352, %eax # imm = 0x10008080 469; CHECK-X86-NEXT: je .LBB10_1 470; CHECK-X86-NEXT: # %bb.2: # %no 471; CHECK-X86-NEXT: retl 472; CHECK-X86-NEXT: .LBB10_1: # %yes 473; CHECK-X86-NEXT: calll bar 474; CHECK-X86-NEXT: retl 475 %t = and i64 %x, 268468352 476 %s = icmp eq i64 %t, 0 477 br i1 %s, label %yes, label %no 478 479yes: 480 call void @bar() 481 ret void 482no: 483 ret void 484} 485 486define void @truncand32(i16 inreg %x) nounwind { 487; CHECK-LINUX64-LABEL: truncand32: 488; CHECK-LINUX64: # %bb.0: 489; CHECK-LINUX64-NEXT: testl $2049, %edi # imm = 0x801 490; CHECK-LINUX64-NEXT: je .LBB11_1 491; CHECK-LINUX64-NEXT: # %bb.2: # %no 492; CHECK-LINUX64-NEXT: retq 493; CHECK-LINUX64-NEXT: .LBB11_1: # %yes 494; CHECK-LINUX64-NEXT: pushq %rax 495; CHECK-LINUX64-NEXT: callq bar 496; CHECK-LINUX64-NEXT: popq %rax 497; CHECK-LINUX64-NEXT: retq 498; 499; CHECK-WIN32-64-LABEL: truncand32: 500; CHECK-WIN32-64: # %bb.0: 501; CHECK-WIN32-64-NEXT: subq $40, %rsp 502; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx 503; CHECK-WIN32-64-NEXT: testl $2049, %ecx # imm = 0x801 504; CHECK-WIN32-64-NEXT: je .LBB11_1 505; CHECK-WIN32-64-NEXT: # %bb.2: # %no 506; CHECK-WIN32-64-NEXT: addq $40, %rsp 507; CHECK-WIN32-64-NEXT: retq 508; CHECK-WIN32-64-NEXT: .LBB11_1: # %yes 509; CHECK-WIN32-64-NEXT: callq bar 510; CHECK-WIN32-64-NEXT: addq $40, %rsp 511; CHECK-WIN32-64-NEXT: retq 512; 513; CHECK-X86-LABEL: truncand32: 514; CHECK-X86: # %bb.0: 515; CHECK-X86-NEXT: testl $2049, %eax # imm = 0x801 516; CHECK-X86-NEXT: je .LBB11_1 517; CHECK-X86-NEXT: # %bb.2: # %no 518; CHECK-X86-NEXT: retl 519; CHECK-X86-NEXT: .LBB11_1: # %yes 520; CHECK-X86-NEXT: calll bar 521; CHECK-X86-NEXT: retl 522 %t = and i16 %x, 2049 523 %s = icmp eq i16 %t, 0 524 br i1 %s, label %yes, label %no 525 526yes: 527 call void @bar() 528 ret void 529no: 530 ret void 531} 532 533define void @testw(i16 inreg %x) nounwind minsize { 534; CHECK-LINUX64-LABEL: testw: 535; CHECK-LINUX64: # %bb.0: 536; CHECK-LINUX64-NEXT: testw $2049, %di # imm = 0x801 537; CHECK-LINUX64-NEXT: je .LBB12_1 538; CHECK-LINUX64-NEXT: # %bb.2: # %no 539; CHECK-LINUX64-NEXT: retq 540; CHECK-LINUX64-NEXT: .LBB12_1: # %yes 541; CHECK-LINUX64-NEXT: pushq %rax 542; CHECK-LINUX64-NEXT: callq bar 543; CHECK-LINUX64-NEXT: popq %rax 544; CHECK-LINUX64-NEXT: retq 545; 546; CHECK-WIN32-64-LABEL: testw: 547; CHECK-WIN32-64: # %bb.0: 548; CHECK-WIN32-64-NEXT: subq $40, %rsp 549; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx 550; CHECK-WIN32-64-NEXT: testw $2049, %cx # imm = 0x801 551; CHECK-WIN32-64-NEXT: jne .LBB12_2 552; CHECK-WIN32-64-NEXT: # %bb.1: # %yes 553; CHECK-WIN32-64-NEXT: callq bar 554; CHECK-WIN32-64-NEXT: .LBB12_2: # %no 555; CHECK-WIN32-64-NEXT: addq $40, %rsp 556; CHECK-WIN32-64-NEXT: retq 557; 558; CHECK-X86-LABEL: testw: 559; CHECK-X86: # %bb.0: 560; CHECK-X86-NEXT: testw $2049, %ax # imm = 0x801 561; CHECK-X86-NEXT: je .LBB12_1 562; CHECK-X86-NEXT: # %bb.2: # %no 563; CHECK-X86-NEXT: retl 564; CHECK-X86-NEXT: .LBB12_1: # %yes 565; CHECK-X86-NEXT: calll bar 566; CHECK-X86-NEXT: retl 567 %t = and i16 %x, 2049 568 %s = icmp eq i16 %t, 0 569 br i1 %s, label %yes, label %no 570 571yes: 572 call void @bar() 573 ret void 574no: 575 ret void 576} 577 578declare void @bar() 579