brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.1 KiB · 5f3ec8a Raw
988 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+nf -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd,+nf -verify-machineinstrs | FileCheck %s --check-prefix=NDD4 5define void @ctest8rr_zf(i8 noundef %a, i8 noundef %b) {6; CHECK-LABEL: ctest8rr_zf:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    testb %dil, %dil9; CHECK-NEXT:    ctestneb {dfv=zf} %sil, %sil10; CHECK-NEXT:    jne .LBB0_111; CHECK-NEXT:  # %bb.2: # %if.then12; CHECK-NEXT:    xorl %eax, %eax13; CHECK-NEXT:    jmp foo # TAILCALL14; CHECK-NEXT:  .LBB0_1: # %if.end15; CHECK-NEXT:    retq16;17; NDD-LABEL: ctest8rr_zf:18; NDD:       # %bb.0: # %entry19; NDD-NEXT:    testb %dil, %dil20; NDD-NEXT:    ctestneb {dfv=zf} %sil, %sil21; NDD-NEXT:    jne .LBB0_122; NDD-NEXT:  # %bb.2: # %if.then23; NDD-NEXT:    xorl %eax, %eax24; NDD-NEXT:    jmp foo # TAILCALL25; NDD-NEXT:  .LBB0_1: # %if.end26; NDD-NEXT:    retq27entry:28  %cmp = icmp eq i8 %a, 029  %cmp1 = icmp eq i8 %b, 030  %or.cond = or i1 %cmp, %cmp131  br i1 %or.cond, label %if.then, label %if.end32 33if.then:                                          ; preds = %entry34  tail call void (...) @foo()35  br label %if.end36 37if.end:                                           ; preds = %entry, %if.then38  ret void39}40 41define i8 @ctest8rr_zf_double(i8 %a, double %b, i8* nocapture %c)  {42; CHECK-LABEL: ctest8rr_zf_double:43; CHECK:       # %bb.0: # %entry44; CHECK-NEXT:    xorpd %xmm1, %xmm145; CHECK-NEXT:    ucomisd %xmm1, %xmm046; CHECK-NEXT:    ctesteb {dfv=zf} %dil, %dil47; CHECK-NEXT:    je .LBB1_248; CHECK-NEXT:  # %bb.1: # %if.then49; CHECK-NEXT:    movb %dil, (%rsi)50; CHECK-NEXT:  .LBB1_2: # %if.end51; CHECK-NEXT:    xorl %eax, %eax52; CHECK-NEXT:    retq53;54; NDD-LABEL: ctest8rr_zf_double:55; NDD:       # %bb.0: # %entry56; NDD-NEXT:    xorpd %xmm1, %xmm157; NDD-NEXT:    ucomisd %xmm1, %xmm058; NDD-NEXT:    ctesteb {dfv=zf} %dil, %dil59; NDD-NEXT:    je .LBB1_260; NDD-NEXT:  # %bb.1: # %if.then61; NDD-NEXT:    movb %dil, (%rsi)62; NDD-NEXT:  .LBB1_2: # %if.end63; NDD-NEXT:    xorl %eax, %eax64; NDD-NEXT:    retq65entry:66  %tobool = icmp ne i8 %a, 067  %cmp = fcmp ueq double %b, 0.068  %or.cond = select i1 %tobool, i1 %cmp, i1 false69  br i1 %or.cond, label %if.then, label %if.end70 71if.then:72  store i8 %a, i8* %c, align 473  br label %if.end74 75if.end:76  ret i8 077}78 79define i8 @ctest8rr_zf_double_p(i8 %a, double %b, i8* nocapture %c)  {80; CHECK-LABEL: ctest8rr_zf_double_p:81; CHECK:       # %bb.0: # %entry82; CHECK-NEXT:    testb %dil, %dil83; CHECK-NEXT:    setne %al84; CHECK-NEXT:    ucomisd %xmm0, %xmm085; CHECK-NEXT:    setp %cl86; CHECK-NEXT:    andb %al, %cl87; CHECK-NEXT:    cmpb $1, %cl88; CHECK-NEXT:    jne .LBB2_289; CHECK-NEXT:  # %bb.1: # %if.then90; CHECK-NEXT:    movb %dil, (%rsi)91; CHECK-NEXT:  .LBB2_2: # %if.end92; CHECK-NEXT:    xorl %eax, %eax93; CHECK-NEXT:    retq94;95; NDD-LABEL: ctest8rr_zf_double_p:96; NDD:       # %bb.0: # %entry97; NDD-NEXT:    testb %dil, %dil98; NDD-NEXT:    setne %al99; NDD-NEXT:    ucomisd %xmm0, %xmm0100; NDD-NEXT:    setp %cl101; NDD-NEXT:    andb %cl, %al102; NDD-NEXT:    cmpb $1, %al103; NDD-NEXT:    jne .LBB2_2104; NDD-NEXT:  # %bb.1: # %if.then105; NDD-NEXT:    movb %dil, (%rsi)106; NDD-NEXT:  .LBB2_2: # %if.end107; NDD-NEXT:    xorl %eax, %eax108; NDD-NEXT:    retq109entry:110  %tobool = icmp ne i8 %a, 0111  %cmp = fcmp uno double %b, 0.0112  %or.cond = select i1 %tobool, i1 %cmp, i1 false113  br i1 %or.cond, label %if.then, label %if.end114 115if.then:116  store i8 %a, i8* %c, align 4117  br label %if.end118 119if.end:120  ret i8 0121}122 123define i8 @ctest8rr_zf_double_np(i8 %a, double %b, i8* nocapture %c)  {124; CHECK-LABEL: ctest8rr_zf_double_np:125; CHECK:       # %bb.0: # %entry126; CHECK-NEXT:    testb %dil, %dil127; CHECK-NEXT:    setne %al128; CHECK-NEXT:    ucomisd %xmm0, %xmm0129; CHECK-NEXT:    setnp %cl130; CHECK-NEXT:    andb %al, %cl131; CHECK-NEXT:    cmpb $1, %cl132; CHECK-NEXT:    jne .LBB3_2133; CHECK-NEXT:  # %bb.1: # %if.then134; CHECK-NEXT:    movb %dil, (%rsi)135; CHECK-NEXT:  .LBB3_2: # %if.end136; CHECK-NEXT:    xorl %eax, %eax137; CHECK-NEXT:    retq138;139; NDD-LABEL: ctest8rr_zf_double_np:140; NDD:       # %bb.0: # %entry141; NDD-NEXT:    testb %dil, %dil142; NDD-NEXT:    setne %al143; NDD-NEXT:    ucomisd %xmm0, %xmm0144; NDD-NEXT:    setnp %cl145; NDD-NEXT:    andb %cl, %al146; NDD-NEXT:    cmpb $1, %al147; NDD-NEXT:    jne .LBB3_2148; NDD-NEXT:  # %bb.1: # %if.then149; NDD-NEXT:    movb %dil, (%rsi)150; NDD-NEXT:  .LBB3_2: # %if.end151; NDD-NEXT:    xorl %eax, %eax152; NDD-NEXT:    retq153entry:154  %tobool = icmp ne i8 %a, 0155  %cmp = fcmp ord double %b, 0.0156  %or.cond = select i1 %tobool, i1 %cmp, i1 false157  br i1 %or.cond, label %if.then, label %if.end158 159if.then:160  store i8 %a, i8* %c, align 4161  br label %if.end162 163if.end:164  ret i8 0165}166 167define void @ctest8rr_sf(i8 noundef %a, i8 noundef %b) {168; CHECK-LABEL: ctest8rr_sf:169; CHECK:       # %bb.0: # %entry170; CHECK-NEXT:    testb %dil, %dil171; CHECK-NEXT:    ctesteb {dfv=sf} %sil, %sil172; CHECK-NEXT:    js .LBB4_1173; CHECK-NEXT:  # %bb.2: # %if.then174; CHECK-NEXT:    xorl %eax, %eax175; CHECK-NEXT:    jmp foo # TAILCALL176; CHECK-NEXT:  .LBB4_1: # %if.end177; CHECK-NEXT:    retq178;179; NDD-LABEL: ctest8rr_sf:180; NDD:       # %bb.0: # %entry181; NDD-NEXT:    testb %dil, %dil182; NDD-NEXT:    ctesteb {dfv=sf} %sil, %sil183; NDD-NEXT:    js .LBB4_1184; NDD-NEXT:  # %bb.2: # %if.then185; NDD-NEXT:    xorl %eax, %eax186; NDD-NEXT:    jmp foo # TAILCALL187; NDD-NEXT:  .LBB4_1: # %if.end188; NDD-NEXT:    retq189entry:190  %cmp = icmp ule i8 %a, 0191  %tobool = icmp sge i8 %b, 0192  %or.cond = and i1 %cmp, %tobool193  br i1 %or.cond, label %if.then, label %if.end194 195if.then:                                          ; preds = %entry196  tail call void (...) @foo()197  br label %if.end198 199if.end:                                           ; preds = %if.then, %entry200  ret void201}202 203define i8 @ctest8rr_sf_2(i8 %a, i8 %b, i8* nocapture %c)  {204; CHECK-LABEL: ctest8rr_sf_2:205; CHECK:       # %bb.0: # %entry206; CHECK-NEXT:    testb %dil, %dil207; CHECK-NEXT:    ctestleb {dfv=sf} %sil, %sil208; CHECK-NEXT:    jns .LBB5_2209; CHECK-NEXT:  # %bb.1: # %if.then210; CHECK-NEXT:    movb %dil, (%rdx)211; CHECK-NEXT:  .LBB5_2: # %if.end212; CHECK-NEXT:    xorl %eax, %eax213; CHECK-NEXT:    retq214;215; NDD-LABEL: ctest8rr_sf_2:216; NDD:       # %bb.0: # %entry217; NDD-NEXT:    testb %dil, %dil218; NDD-NEXT:    ctestleb {dfv=sf} %sil, %sil219; NDD-NEXT:    jns .LBB5_2220; NDD-NEXT:  # %bb.1: # %if.then221; NDD-NEXT:    movb %dil, (%rdx)222; NDD-NEXT:  .LBB5_2: # %if.end223; NDD-NEXT:    xorl %eax, %eax224; NDD-NEXT:    retq225entry:226  %tobool = icmp sgt i8 %a, 0227  %cmp = icmp slt i8 %b, 0228  %or.cond = select i1 %tobool, i1 true, i1 %cmp229  br i1 %or.cond, label %if.then, label %if.end230 231if.then:232  store i8 %a, i8* %c, align 4233  br label %if.end234 235if.end:236  ret i8 0237}238 239define i8 @ctest8rr_none(i8 %a, i8 %b, i8* nocapture %c)  {240; CHECK-LABEL: ctest8rr_none:241; CHECK:       # %bb.0: # %entry242; CHECK-NEXT:    testb %dil, %dil243; CHECK-NEXT:    ctestneb {dfv=} %sil, %sil244; CHECK-NEXT:    jne .LBB6_2245; CHECK-NEXT:  # %bb.1: # %if.then246; CHECK-NEXT:    movb %dil, (%rdx)247; CHECK-NEXT:  .LBB6_2: # %if.end248; CHECK-NEXT:    xorl %eax, %eax249; CHECK-NEXT:    retq250;251; NDD-LABEL: ctest8rr_none:252; NDD:       # %bb.0: # %entry253; NDD-NEXT:    testb %dil, %dil254; NDD-NEXT:    ctestneb {dfv=} %sil, %sil255; NDD-NEXT:    jne .LBB6_2256; NDD-NEXT:  # %bb.1: # %if.then257; NDD-NEXT:    movb %dil, (%rdx)258; NDD-NEXT:  .LBB6_2: # %if.end259; NDD-NEXT:    xorl %eax, %eax260; NDD-NEXT:    retq261entry:262  %tobool = icmp ne i8 %a, 0263  %cmp = icmp eq i8 %b, 0264  %or.cond = select i1 %tobool, i1 %cmp, i1 false265  br i1 %or.cond, label %if.then, label %if.end266 267if.then:268  store i8 %a, i8* %c, align 4269  br label %if.end270 271if.end:272  ret i8 0273}274 275define void @ctest16rr_sf(i16 noundef %a, i16 noundef %b) {276; CHECK-LABEL: ctest16rr_sf:277; CHECK:       # %bb.0: # %entry278; CHECK-NEXT:    testw %di, %di279; CHECK-NEXT:    ctestlew {dfv=sf} %si, %si280; CHECK-NEXT:    jns .LBB7_1281; CHECK-NEXT:  # %bb.2: # %if.then282; CHECK-NEXT:    xorl %eax, %eax283; CHECK-NEXT:    jmp foo # TAILCALL284; CHECK-NEXT:  .LBB7_1: # %if.end285; CHECK-NEXT:    retq286;287; NDD-LABEL: ctest16rr_sf:288; NDD:       # %bb.0: # %entry289; NDD-NEXT:    testw %di, %di290; NDD-NEXT:    ctestlew {dfv=sf} %si, %si291; NDD-NEXT:    jns .LBB7_1292; NDD-NEXT:  # %bb.2: # %if.then293; NDD-NEXT:    xorl %eax, %eax294; NDD-NEXT:    jmp foo # TAILCALL295; NDD-NEXT:  .LBB7_1: # %if.end296; NDD-NEXT:    retq297entry:298  %cmp = icmp sgt i16 %a, 0299  %cmp1 = icmp slt i16 %b, 0300  %or.cond = or i1 %cmp, %cmp1301  br i1 %or.cond, label %if.then, label %if.end302 303if.then:                                          ; preds = %entry304  tail call void (...) @foo()305  br label %if.end306 307if.end:                                           ; preds = %entry, %if.then308  ret void309}310 311define void @ctest32rr_zf(i32 noundef %a, i32 noundef %b) {312; CHECK-LABEL: ctest32rr_zf:313; CHECK:       # %bb.0: # %entry314; CHECK-NEXT:    testl %edi, %edi315; CHECK-NEXT:    ctestsl {dfv=zf} %esi, %esi316; CHECK-NEXT:    jne .LBB8_1317; CHECK-NEXT:  # %bb.2: # %if.then318; CHECK-NEXT:    xorl %eax, %eax319; CHECK-NEXT:    jmp foo # TAILCALL320; CHECK-NEXT:  .LBB8_1: # %if.end321; CHECK-NEXT:    retq322;323; NDD-LABEL: ctest32rr_zf:324; NDD:       # %bb.0: # %entry325; NDD-NEXT:    testl %edi, %edi326; NDD-NEXT:    ctestsl {dfv=zf} %esi, %esi327; NDD-NEXT:    jne .LBB8_1328; NDD-NEXT:  # %bb.2: # %if.then329; NDD-NEXT:    xorl %eax, %eax330; NDD-NEXT:    jmp foo # TAILCALL331; NDD-NEXT:  .LBB8_1: # %if.end332; NDD-NEXT:    retq333entry:334  %cmp = icmp sge i32 %a, 0335  %cmp1 = icmp eq i32 %b, 0336  %or.cond = or i1 %cmp, %cmp1337  br i1 %or.cond, label %if.then, label %if.end338 339if.then:                                          ; preds = %entry340  tail call void (...) @foo()341  br label %if.end342 343if.end:                                           ; preds = %entry, %if.then344  ret void345}346 347define void @ctest8ri_zf(i8 noundef %a, i8 noundef %b) {348; CHECK-LABEL: ctest8ri_zf:349; CHECK:       # %bb.0: # %entry350; CHECK-NEXT:    testb %dil, %dil351; CHECK-NEXT:    ctestneb {dfv=zf} $123, %sil352; CHECK-NEXT:    jne .LBB9_1353; CHECK-NEXT:  # %bb.2: # %if.then354; CHECK-NEXT:    xorl %eax, %eax355; CHECK-NEXT:    jmp foo # TAILCALL356; CHECK-NEXT:  .LBB9_1: # %if.end357; CHECK-NEXT:    retq358;359; NDD-LABEL: ctest8ri_zf:360; NDD:       # %bb.0: # %entry361; NDD-NEXT:    testb %dil, %dil362; NDD-NEXT:    ctestneb {dfv=zf} $123, %sil363; NDD-NEXT:    jne .LBB9_1364; NDD-NEXT:  # %bb.2: # %if.then365; NDD-NEXT:    xorl %eax, %eax366; NDD-NEXT:    jmp foo # TAILCALL367; NDD-NEXT:  .LBB9_1: # %if.end368; NDD-NEXT:    retq369entry:370  %cmp = icmp eq i8 %a, 0371  %and = and i8 %b, 123372  %cmp1 = icmp eq i8 %and, 0373  %or.cond = or i1 %cmp, %cmp1374  br i1 %or.cond, label %if.then, label %if.end375 376if.then:                                          ; preds = %entry377  tail call void (...) @foo()378  br label %if.end379 380if.end:                                           ; preds = %entry, %if.then381  ret void382}383 384define void @ctest16ri_zf(i16 noundef %a, i16 noundef %b) {385; CHECK-LABEL: ctest16ri_zf:386; CHECK:       # %bb.0: # %entry387; CHECK-NEXT:    andl $1234, %esi # imm = 0x4D2388; CHECK-NEXT:    testw %di, %di389; CHECK-NEXT:    ctestnew {dfv=zf} %si, %si390; CHECK-NEXT:    jne .LBB10_1391; CHECK-NEXT:  # %bb.2: # %if.then392; CHECK-NEXT:    xorl %eax, %eax393; CHECK-NEXT:    jmp foo # TAILCALL394; CHECK-NEXT:  .LBB10_1: # %if.end395; CHECK-NEXT:    retq396;397; NDD-LABEL: ctest16ri_zf:398; NDD:       # %bb.0: # %entry399; NDD-NEXT:    testw %di, %di400; NDD-NEXT:    ctestnew {dfv=zf} $1234, %si # imm = 0x4D2401; NDD-NEXT:    jne .LBB10_1402; NDD-NEXT:  # %bb.2: # %if.then403; NDD-NEXT:    xorl %eax, %eax404; NDD-NEXT:    jmp foo # TAILCALL405; NDD-NEXT:  .LBB10_1: # %if.end406; NDD-NEXT:    retq407entry:408  %cmp = icmp eq i16 %a, 0409  %and = and i16 %b, 1234410  %cmp1 = icmp eq i16 %and, 0411  %or.cond = or i1 %cmp, %cmp1412  br i1 %or.cond, label %if.then, label %if.end413 414if.then:                                          ; preds = %entry415  tail call void (...) @foo()416  br label %if.end417 418if.end:                                           ; preds = %entry, %if.then419  ret void420}421 422define void @ctest32ri_zf(i32 noundef %a, i32 noundef %b) {423; CHECK-LABEL: ctest32ri_zf:424; CHECK:       # %bb.0: # %entry425; CHECK-NEXT:    testl %edi, %edi426; CHECK-NEXT:    ctestnel {dfv=zf} $12345, %esi # imm = 0x3039427; CHECK-NEXT:    jne .LBB11_1428; CHECK-NEXT:  # %bb.2: # %if.then429; CHECK-NEXT:    xorl %eax, %eax430; CHECK-NEXT:    jmp foo # TAILCALL431; CHECK-NEXT:  .LBB11_1: # %if.end432; CHECK-NEXT:    retq433;434; NDD-LABEL: ctest32ri_zf:435; NDD:       # %bb.0: # %entry436; NDD-NEXT:    testl %edi, %edi437; NDD-NEXT:    ctestnel {dfv=zf} $12345, %esi # imm = 0x3039438; NDD-NEXT:    jne .LBB11_1439; NDD-NEXT:  # %bb.2: # %if.then440; NDD-NEXT:    xorl %eax, %eax441; NDD-NEXT:    jmp foo # TAILCALL442; NDD-NEXT:  .LBB11_1: # %if.end443; NDD-NEXT:    retq444entry:445  %cmp = icmp eq i32 %a, 0446  %and = and i32 %b, 12345447  %cmp1 = icmp eq i32 %and, 0448  %or.cond = or i1 %cmp, %cmp1449  br i1 %or.cond, label %if.then, label %if.end450 451if.then:                                          ; preds = %entry452  tail call void (...) @foo()453  br label %if.end454 455if.end:                                           ; preds = %entry, %if.then456  ret void457}458 459define void @ctest64ri32_zf(i64 noundef %a, i64 noundef %b) {460; CHECK-LABEL: ctest64ri32_zf:461; CHECK:       # %bb.0: # %entry462; CHECK-NEXT:    testq %rdi, %rdi463; CHECK-NEXT:    ctestneq {dfv=zf} $123456, %rsi # imm = 0x1E240464; CHECK-NEXT:    jne .LBB12_1465; CHECK-NEXT:  # %bb.2: # %if.then466; CHECK-NEXT:    xorl %eax, %eax467; CHECK-NEXT:    jmp foo # TAILCALL468; CHECK-NEXT:  .LBB12_1: # %if.end469; CHECK-NEXT:    retq470;471; NDD-LABEL: ctest64ri32_zf:472; NDD:       # %bb.0: # %entry473; NDD-NEXT:    testq %rdi, %rdi474; NDD-NEXT:    ctestneq {dfv=zf} $123456, %rsi # imm = 0x1E240475; NDD-NEXT:    jne .LBB12_1476; NDD-NEXT:  # %bb.2: # %if.then477; NDD-NEXT:    xorl %eax, %eax478; NDD-NEXT:    jmp foo # TAILCALL479; NDD-NEXT:  .LBB12_1: # %if.end480; NDD-NEXT:    retq481entry:482  %cmp = icmp eq i64 %a, 0483  %and = and i64 %b, 123456484  %cmp1 = icmp eq i64 %and, 0485  %or.cond = or i1 %cmp, %cmp1486  br i1 %or.cond, label %if.then, label %if.end487 488if.then:                                          ; preds = %entry489  tail call void (...) @foo()490  br label %if.end491 492if.end:                                           ; preds = %entry, %if.then493  ret void494}495 496define void @ctest8mr_zf(i8 noundef %a, ptr %ptr) {497; CHECK-LABEL: ctest8mr_zf:498; CHECK:       # %bb.0: # %entry499; CHECK-NEXT:    movzbl (%rsi), %eax500; CHECK-NEXT:    testb %dil, %dil501; CHECK-NEXT:    ctestneb {dfv=zf} %al, %al502; CHECK-NEXT:    jne .LBB13_1503; CHECK-NEXT:  # %bb.2: # %if.then504; CHECK-NEXT:    xorl %eax, %eax505; CHECK-NEXT:    jmp foo # TAILCALL506; CHECK-NEXT:  .LBB13_1: # %if.end507; CHECK-NEXT:    retq508;509; NDD-LABEL: ctest8mr_zf:510; NDD:       # %bb.0: # %entry511; NDD-NEXT:    movzbl (%rsi), %eax512; NDD-NEXT:    testb %dil, %dil513; NDD-NEXT:    ctestneb {dfv=zf} %al, %al514; NDD-NEXT:    jne .LBB13_1515; NDD-NEXT:  # %bb.2: # %if.then516; NDD-NEXT:    xorl %eax, %eax517; NDD-NEXT:    jmp foo # TAILCALL518; NDD-NEXT:  .LBB13_1: # %if.end519; NDD-NEXT:    retq520entry:521  %b = load i8, ptr %ptr522  %cmp = icmp eq i8 %a, 0523  %cmp1 = icmp eq i8 %b, 0524  %or.cond = or i1 %cmp, %cmp1525  br i1 %or.cond, label %if.then, label %if.end526 527if.then:                                          ; preds = %entry528  tail call void (...) @foo()529  br label %if.end530 531if.end:                                           ; preds = %entry, %if.then532  ret void533}534 535define void @ctest16mr_zf(i16 noundef %a, ptr %ptr) {536; CHECK-LABEL: ctest16mr_zf:537; CHECK:       # %bb.0: # %entry538; CHECK-NEXT:    movzwl (%rsi), %eax539; CHECK-NEXT:    testw %di, %di540; CHECK-NEXT:    ctestnew {dfv=zf} %ax, %ax541; CHECK-NEXT:    jne .LBB14_1542; CHECK-NEXT:  # %bb.2: # %if.then543; CHECK-NEXT:    xorl %eax, %eax544; CHECK-NEXT:    jmp foo # TAILCALL545; CHECK-NEXT:  .LBB14_1: # %if.end546; CHECK-NEXT:    retq547;548; NDD-LABEL: ctest16mr_zf:549; NDD:       # %bb.0: # %entry550; NDD-NEXT:    movzwl (%rsi), %eax551; NDD-NEXT:    testw %di, %di552; NDD-NEXT:    ctestnew {dfv=zf} %ax, %ax553; NDD-NEXT:    jne .LBB14_1554; NDD-NEXT:  # %bb.2: # %if.then555; NDD-NEXT:    xorl %eax, %eax556; NDD-NEXT:    jmp foo # TAILCALL557; NDD-NEXT:  .LBB14_1: # %if.end558; NDD-NEXT:    retq559entry:560  %b = load i16, ptr %ptr561  %cmp = icmp eq i16 %a, 0562  %cmp1 = icmp eq i16 %b, 0563  %or.cond = or i1 %cmp, %cmp1564  br i1 %or.cond, label %if.then, label %if.end565 566if.then:                                          ; preds = %entry567  tail call void (...) @foo()568  br label %if.end569 570if.end:                                           ; preds = %entry, %if.then571  ret void572}573 574define void @ctest32mr_cf(i32 noundef %a, ptr %ptr) {575; CHECK-LABEL: ctest32mr_cf:576; CHECK:       # %bb.0: # %entry577; CHECK-NEXT:    movl (%rsi), %eax578; CHECK-NEXT:    testl %edi, %edi579; CHECK-NEXT:    ctestnel {dfv=zf} %eax, %eax580; CHECK-NEXT:    jne .LBB15_1581; CHECK-NEXT:  # %bb.2: # %if.then582; CHECK-NEXT:    xorl %eax, %eax583; CHECK-NEXT:    jmp foo # TAILCALL584; CHECK-NEXT:  .LBB15_1: # %if.end585; CHECK-NEXT:    retq586;587; NDD-LABEL: ctest32mr_cf:588; NDD:       # %bb.0: # %entry589; NDD-NEXT:    movl (%rsi), %eax590; NDD-NEXT:    testl %edi, %edi591; NDD-NEXT:    ctestnel {dfv=zf} %eax, %eax592; NDD-NEXT:    jne .LBB15_1593; NDD-NEXT:  # %bb.2: # %if.then594; NDD-NEXT:    xorl %eax, %eax595; NDD-NEXT:    jmp foo # TAILCALL596; NDD-NEXT:  .LBB15_1: # %if.end597; NDD-NEXT:    retq598entry:599  %b = load i32, ptr %ptr600  %cmp = icmp eq i32 %a, 0601  %cmp1 = icmp eq i32 %b, 0602  %or.cond = or i1 %cmp, %cmp1603  br i1 %or.cond, label %if.then, label %if.end604 605if.then:                                          ; preds = %entry606  tail call void (...) @foo()607  br label %if.end608 609if.end:                                           ; preds = %entry, %if.then610  ret void611}612 613define void @ctest64mr_zf(i64 noundef %a, ptr %ptr) {614; CHECK-LABEL: ctest64mr_zf:615; CHECK:       # %bb.0: # %entry616; CHECK-NEXT:    movq (%rsi), %rax617; CHECK-NEXT:    testq %rdi, %rdi618; CHECK-NEXT:    ctestneq {dfv=zf} %rax, %rax619; CHECK-NEXT:    jne .LBB16_1620; CHECK-NEXT:  # %bb.2: # %if.then621; CHECK-NEXT:    xorl %eax, %eax622; CHECK-NEXT:    jmp foo # TAILCALL623; CHECK-NEXT:  .LBB16_1: # %if.end624; CHECK-NEXT:    retq625;626; NDD-LABEL: ctest64mr_zf:627; NDD:       # %bb.0: # %entry628; NDD-NEXT:    movq (%rsi), %rax629; NDD-NEXT:    testq %rdi, %rdi630; NDD-NEXT:    ctestneq {dfv=zf} %rax, %rax631; NDD-NEXT:    jne .LBB16_1632; NDD-NEXT:  # %bb.2: # %if.then633; NDD-NEXT:    xorl %eax, %eax634; NDD-NEXT:    jmp foo # TAILCALL635; NDD-NEXT:  .LBB16_1: # %if.end636; NDD-NEXT:    retq637entry:638  %b = load i64, ptr %ptr639  %cmp = icmp eq i64 %a, 0640  %cmp1 = icmp eq i64 %b, 0641  %or.cond = or i1 %cmp, %cmp1642  br i1 %or.cond, label %if.then, label %if.end643 644if.then:                                          ; preds = %entry645  tail call void (...) @foo()646  br label %if.end647 648if.end:                                           ; preds = %entry, %if.then649  ret void650}651 652define void @ctest8mi_zf(i8 noundef %a, ptr %ptr) {653; CHECK-LABEL: ctest8mi_zf:654; CHECK:       # %bb.0: # %entry655; CHECK-NEXT:    testb %dil, %dil656; CHECK-NEXT:    ctestneb {dfv=zf} $123, (%rsi)657; CHECK-NEXT:    jne .LBB17_1658; CHECK-NEXT:  # %bb.2: # %if.then659; CHECK-NEXT:    xorl %eax, %eax660; CHECK-NEXT:    jmp foo # TAILCALL661; CHECK-NEXT:  .LBB17_1: # %if.end662; CHECK-NEXT:    retq663;664; NDD-LABEL: ctest8mi_zf:665; NDD:       # %bb.0: # %entry666; NDD-NEXT:    testb %dil, %dil667; NDD-NEXT:    ctestneb {dfv=zf} $123, (%rsi)668; NDD-NEXT:    jne .LBB17_1669; NDD-NEXT:  # %bb.2: # %if.then670; NDD-NEXT:    xorl %eax, %eax671; NDD-NEXT:    jmp foo # TAILCALL672; NDD-NEXT:  .LBB17_1: # %if.end673; NDD-NEXT:    retq674entry:675  %b = load i8, ptr %ptr676  %cmp = icmp eq i8 %a, 0677  %and = and i8 %b, 123678  %cmp1 = icmp eq i8 %and, 0679  %or.cond = or i1 %cmp, %cmp1680  br i1 %or.cond, label %if.then, label %if.end681 682if.then:                                          ; preds = %entry683  tail call void (...) @foo()684  br label %if.end685 686if.end:                                           ; preds = %entry, %if.then687  ret void688}689 690define void @ctest16mi_zf(i16 noundef %a, ptr %ptr) {691; CHECK-LABEL: ctest16mi_zf:692; CHECK:       # %bb.0: # %entry693; CHECK-NEXT:    movzwl (%rsi), %eax694; CHECK-NEXT:    andl $1234, %eax # imm = 0x4D2695; CHECK-NEXT:    testw %di, %di696; CHECK-NEXT:    ctestnew {dfv=zf} %ax, %ax697; CHECK-NEXT:    jne .LBB18_1698; CHECK-NEXT:  # %bb.2: # %if.then699; CHECK-NEXT:    xorl %eax, %eax700; CHECK-NEXT:    jmp foo # TAILCALL701; CHECK-NEXT:  .LBB18_1: # %if.end702; CHECK-NEXT:    retq703;704; NDD-LABEL: ctest16mi_zf:705; NDD:       # %bb.0: # %entry706; NDD-NEXT:    testw %di, %di707; NDD-NEXT:    ctestnew {dfv=zf} $1234, (%rsi) # imm = 0x4D2708; NDD-NEXT:    jne .LBB18_1709; NDD-NEXT:  # %bb.2: # %if.then710; NDD-NEXT:    xorl %eax, %eax711; NDD-NEXT:    jmp foo # TAILCALL712; NDD-NEXT:  .LBB18_1: # %if.end713; NDD-NEXT:    retq714entry:715  %b = load i16, ptr %ptr716  %cmp = icmp eq i16 %a, 0717  %and = and i16 %b, 1234718  %cmp1 = icmp eq i16 %and, 0719  %or.cond = or i1 %cmp, %cmp1720  br i1 %or.cond, label %if.then, label %if.end721 722if.then:                                          ; preds = %entry723  tail call void (...) @foo()724  br label %if.end725 726if.end:                                           ; preds = %entry, %if.then727  ret void728}729 730define void @ctest32mi_zf(i32 noundef %a, ptr %ptr) {731; CHECK-LABEL: ctest32mi_zf:732; CHECK:       # %bb.0: # %entry733; CHECK-NEXT:    movzwl (%rsi), %eax734; CHECK-NEXT:    andl $12345, %eax # imm = 0x3039735; CHECK-NEXT:    testl %edi, %edi736; CHECK-NEXT:    ctestnew {dfv=zf} %ax, %ax737; CHECK-NEXT:    jne .LBB19_1738; CHECK-NEXT:  # %bb.2: # %if.then739; CHECK-NEXT:    xorl %eax, %eax740; CHECK-NEXT:    jmp foo # TAILCALL741; CHECK-NEXT:  .LBB19_1: # %if.end742; CHECK-NEXT:    retq743;744; NDD-LABEL: ctest32mi_zf:745; NDD:       # %bb.0: # %entry746; NDD-NEXT:    testl %edi, %edi747; NDD-NEXT:    ctestnew {dfv=zf} $12345, (%rsi) # imm = 0x3039748; NDD-NEXT:    jne .LBB19_1749; NDD-NEXT:  # %bb.2: # %if.then750; NDD-NEXT:    xorl %eax, %eax751; NDD-NEXT:    jmp foo # TAILCALL752; NDD-NEXT:  .LBB19_1: # %if.end753; NDD-NEXT:    retq754entry:755  %b = load i32, ptr %ptr756  %cmp = icmp eq i32 %a, 0757  %and = and i32 %b, 12345758  %cmp1 = icmp eq i32 %and, 0759  %or.cond = or i1 %cmp, %cmp1760  br i1 %or.cond, label %if.then, label %if.end761 762if.then:                                          ; preds = %entry763  tail call void (...) @foo()764  br label %if.end765 766if.end:                                           ; preds = %entry, %if.then767  ret void768}769 770define void @ctest64mi32_zf(i64 noundef %a, ptr %ptr) {771; CHECK-LABEL: ctest64mi32_zf:772; CHECK:       # %bb.0: # %entry773; CHECK-NEXT:    testq %rdi, %rdi774; CHECK-NEXT:    ctestnel {dfv=zf} $123456, (%rsi) # imm = 0x1E240775; CHECK-NEXT:    jne .LBB20_1776; CHECK-NEXT:  # %bb.2: # %if.then777; CHECK-NEXT:    xorl %eax, %eax778; CHECK-NEXT:    jmp foo # TAILCALL779; CHECK-NEXT:  .LBB20_1: # %if.end780; CHECK-NEXT:    retq781;782; NDD-LABEL: ctest64mi32_zf:783; NDD:       # %bb.0: # %entry784; NDD-NEXT:    testq %rdi, %rdi785; NDD-NEXT:    ctestnel {dfv=zf} $123456, (%rsi) # imm = 0x1E240786; NDD-NEXT:    jne .LBB20_1787; NDD-NEXT:  # %bb.2: # %if.then788; NDD-NEXT:    xorl %eax, %eax789; NDD-NEXT:    jmp foo # TAILCALL790; NDD-NEXT:  .LBB20_1: # %if.end791; NDD-NEXT:    retq792entry:793  %b = load i64, ptr %ptr794  %cmp = icmp eq i64 %a, 0795  %and = and i64 %b, 123456796  %cmp1 = icmp eq i64 %and, 0797  %or.cond = or i1 %cmp, %cmp1798  br i1 %or.cond, label %if.then, label %if.end799 800if.then:                                          ; preds = %entry801  tail call void (...) @foo()802  br label %if.end803 804if.end:                                           ; preds = %entry, %if.then805  ret void806}807 808define void @ctest_continous(i32 noundef %a, i32 noundef %b, i32 noundef %c) {809; CHECK-LABEL: ctest_continous:810; CHECK:       # %bb.0: # %entry811; CHECK-NEXT:    cmpl %esi, %edi812; CHECK-NEXT:    ctestll {dfv=} %esi, %esi813; CHECK-NEXT:    ctestnsl {dfv=sf} %edx, %edx814; CHECK-NEXT:    jns .LBB21_1815; CHECK-NEXT:  # %bb.2: # %if.then816; CHECK-NEXT:    xorl %eax, %eax817; CHECK-NEXT:    jmp foo # TAILCALL818; CHECK-NEXT:  .LBB21_1: # %if.end819; CHECK-NEXT:    retq820;821; NDD-LABEL: ctest_continous:822; NDD:       # %bb.0: # %entry823; NDD-NEXT:    cmpl %esi, %edi824; NDD-NEXT:    ctestll {dfv=} %esi, %esi825; NDD-NEXT:    ctestnsl {dfv=sf} %edx, %edx826; NDD-NEXT:    jns .LBB21_1827; NDD-NEXT:  # %bb.2: # %if.then828; NDD-NEXT:    xorl %eax, %eax829; NDD-NEXT:    jmp foo # TAILCALL830; NDD-NEXT:  .LBB21_1: # %if.end831; NDD-NEXT:    retq832entry:833  %cmp = icmp slt i32 %a, %b834  %cmp1 = icmp slt i32 %b, 0835  %or.cond = and i1 %cmp, %cmp1836  %cmp2 = icmp slt i32 %c, 0837  %or.cond3 = or i1 %or.cond, %cmp2838  br i1 %or.cond3, label %if.then, label %if.end839 840if.then:                                          ; preds = %entry841  tail call void (...) @foo()842  br label %if.end843 844if.end:                                           ; preds = %if.then, %entry845  ret void846}847 848define i32 @ctest_nobranch(i32 noundef %a, i32 noundef %b) {849; CHECK-LABEL: ctest_nobranch:850; CHECK:       # %bb.0: # %entry851; CHECK-NEXT:    testl %edi, %edi852; CHECK-NEXT:    ctestlel {dfv=} %esi, %esi853; CHECK-NEXT:    setg %al854; CHECK-NEXT:    movzbl %al, %eax855; CHECK-NEXT:    retq856;857; NDD-LABEL: ctest_nobranch:858; NDD:       # %bb.0: # %entry859; NDD-NEXT:    testl %edi, %edi860; NDD-NEXT:    ctestlel {dfv=} %esi, %esi861; NDD-NEXT:    setg %al862; NDD-NEXT:    movzbl %al, %eax863; NDD-NEXT:    retq864entry:865  %cmp = icmp sgt i32 %a, 0866  %cmp1 = icmp sgt i32 %b, 0867  %or.cond.not = or i1 %cmp, %cmp1868  %. = zext i1 %or.cond.not to i32869  ret i32 %.870}871 872define i32 @ctest_continous_nobranch(i32 noundef %a, i32 noundef %b, i32 noundef %c) {873; CHECK-LABEL: ctest_continous_nobranch:874; CHECK:       # %bb.0: # %entry875; CHECK-NEXT:    testl %edi, %edi876; CHECK-NEXT:    ctestlel {dfv=sf} %esi, %esi877; CHECK-NEXT:    ctestsl {dfv=zf} %edx, %edx878; CHECK-NEXT:    setg %al879; CHECK-NEXT:    movzbl %al, %eax880; CHECK-NEXT:    retq881;882; NDD-LABEL: ctest_continous_nobranch:883; NDD:       # %bb.0: # %entry884; NDD-NEXT:    testl %edi, %edi885; NDD-NEXT:    ctestlel {dfv=sf} %esi, %esi886; NDD-NEXT:    ctestsl {dfv=zf} %edx, %edx887; NDD-NEXT:    setg %al888; NDD-NEXT:    movzbl %al, %eax889; NDD-NEXT:    retq890entry:891  %cmp = icmp sgt i32 %a, 0892  %cmp1 = icmp slt i32 %b, 0893  %cmp2 = icmp sgt i32 %c, 0894  %or1 = or i1 %cmp, %cmp1895  %or2 =  and i1 %or1, %cmp2896  %. = zext i1 %or2 to i32897  ret i32 %.898}899 900define void @ctest64ri64(i64 noundef %a, i64 noundef %b) {901; CHECK-LABEL: ctest64ri64:902; CHECK:       # %bb.0: # %entry903; CHECK-NEXT:    testq %rdi, %rdi904; CHECK-NEXT:    movabsq $9992147483647, %rax # imm = 0x9167A66BBFF905; CHECK-NEXT:    ctestneq {dfv=zf} %rax, %rsi906; CHECK-NEXT:    jne .LBB24_1907; CHECK-NEXT:  # %bb.2: # %if.then908; CHECK-NEXT:    xorl %eax, %eax909; CHECK-NEXT:    jmp foo # TAILCALL910; CHECK-NEXT:  .LBB24_1: # %if.end911; CHECK-NEXT:    retq912;913; NDD-LABEL: ctest64ri64:914; NDD:       # %bb.0: # %entry915; NDD-NEXT:    testq %rdi, %rdi916; NDD-NEXT:    movabsq $9992147483647, %rax # imm = 0x9167A66BBFF917; NDD-NEXT:    ctestneq {dfv=zf} %rax, %rsi918; NDD-NEXT:    jne .LBB24_1919; NDD-NEXT:  # %bb.2: # %if.then920; NDD-NEXT:    xorl %eax, %eax921; NDD-NEXT:    jmp foo # TAILCALL922; NDD-NEXT:  .LBB24_1: # %if.end923; NDD-NEXT:    retq924entry:925  %cmp = icmp eq i64 %a, 0926  %and = and i64 %b, 9992147483647927  %cmp1 = icmp eq i64 %and, 0928  %or.cond = or i1 %cmp, %cmp1929  br i1 %or.cond, label %if.then, label %if.end930 931if.then:                                          ; preds = %entry932  tail call void (...) @foo()933  br label %if.end934 935if.end:                                           ; preds = %entry, %if.then936  ret void937}938 939define void @cmp_srem(ptr %p, i32 %a, ptr %b) {940; CHECK-LABEL: cmp_srem:941; CHECK:       # %bb.0: # %bb942; CHECK-NEXT:    movq %rdx, %rcx943; CHECK-NEXT:    movl %esi, %eax944; CHECK-NEXT:    subl $1, %eax945; CHECK-NEXT:    movl (%rdi), %edi946; CHECK-NEXT:    cltd947; CHECK-NEXT:    {nf} idivl %edi948; CHECK-NEXT:    ctestnel {dfv=} %edx, %edx949; CHECK-NEXT:    sete %al950; CHECK-NEXT:    cmpl $1, %esi951; CHECK-NEXT:    ccmpael {dfv=zf} $1, %edi952; CHECK-NEXT:    sete %dl953; CHECK-NEXT:    orb %al, %dl954; CHECK-NEXT:    movb %dl, (%rcx)955; CHECK-NEXT:    retq956;957; NDD-LABEL: cmp_srem:958; NDD:       # %bb.0: # %bb959; NDD-NEXT:    movq %rdx, %rcx960; NDD-NEXT:    subl $1, %esi, %eax961; NDD-NEXT:    movl (%rdi), %edi962; NDD-NEXT:    cltd963; NDD-NEXT:    {nf} idivl %edi964; NDD-NEXT:    ctestnel {dfv=} %edx, %edx965; NDD-NEXT:    sete %al966; NDD-NEXT:    cmpl $1, %esi967; NDD-NEXT:    ccmpael {dfv=zf} $1, %edi968; NDD-NEXT:    sete %dl969; NDD-NEXT:    orb %dl, %al970; NDD-NEXT:    movb %al, (%rcx)971; NDD-NEXT:    retq972bb:973  %i = icmp eq i32 %a, 0974  %i2 = load i32, ptr %p, align 4975  %i3 = icmp eq i32 %i2, 1976  %i4 = or i1 %i, %i3977  %i5 = add i32 %a, -1978  %i6 = srem i32 %i5, %i2979  %i7 = icmp eq i32 %i6, 0980  %i8 = icmp ne i32 %a, 1981  %i9 = and i1 %i8, %i7982  %i10 = or i1 %i4, %i9983  store i1 %i10, ptr %b, align 1984  ret void985}986 987declare dso_local void @foo(...)988