279 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4define i64 @test_clear_mask_i64_i32(i64 %x) nounwind {5; CHECK-LABEL: test_clear_mask_i64_i32:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: movq %rdi, %rax8; CHECK-NEXT: testl %eax, %eax9; CHECK-NEXT: js .LBB0_210; CHECK-NEXT: # %bb.1: # %t11; CHECK-NEXT: movl $42, %eax12; CHECK-NEXT: .LBB0_2: # %f13; CHECK-NEXT: retq14entry:15 %a = and i64 %x, 214748364816 %r = icmp eq i64 %a, 017 br i1 %r, label %t, label %f18t:19 br label %f20f:21 %ret = phi i64 [ %x, %entry], [ 42, %t]22 ret i64 %ret23}24 25define i64 @test_set_mask_i64_i32(i64 %x) nounwind {26; CHECK-LABEL: test_set_mask_i64_i32:27; CHECK: # %bb.0: # %entry28; CHECK-NEXT: movq %rdi, %rax29; CHECK-NEXT: testl %eax, %eax30; CHECK-NEXT: jns .LBB1_231; CHECK-NEXT: # %bb.1: # %t32; CHECK-NEXT: movl $42, %eax33; CHECK-NEXT: .LBB1_2: # %f34; CHECK-NEXT: retq35entry:36 %a = and i64 %x, 214748364837 %r = icmp ne i64 %a, 038 br i1 %r, label %t, label %f39t:40 br label %f41f:42 %ret = phi i64 [ %x, %entry], [ 42, %t]43 ret i64 %ret44}45 46define i64 @test_clear_mask_i64_i16(i64 %x) nounwind {47; CHECK-LABEL: test_clear_mask_i64_i16:48; CHECK: # %bb.0: # %entry49; CHECK-NEXT: movq %rdi, %rax50; CHECK-NEXT: testw %ax, %ax51; CHECK-NEXT: js .LBB2_252; CHECK-NEXT: # %bb.1: # %t53; CHECK-NEXT: movl $42, %eax54; CHECK-NEXT: .LBB2_2: # %f55; CHECK-NEXT: retq56entry:57 %a = and i64 %x, 3276858 %r = icmp eq i64 %a, 059 br i1 %r, label %t, label %f60t:61 br label %f62f:63 %ret = phi i64 [ %x, %entry], [ 42, %t]64 ret i64 %ret65}66 67define i64 @test_set_mask_i64_i16(i64 %x) nounwind {68; CHECK-LABEL: test_set_mask_i64_i16:69; CHECK: # %bb.0: # %entry70; CHECK-NEXT: movq %rdi, %rax71; CHECK-NEXT: testw %ax, %ax72; CHECK-NEXT: jns .LBB3_273; CHECK-NEXT: # %bb.1: # %t74; CHECK-NEXT: movl $42, %eax75; CHECK-NEXT: .LBB3_2: # %f76; CHECK-NEXT: retq77entry:78 %a = and i64 %x, 3276879 %r = icmp ne i64 %a, 080 br i1 %r, label %t, label %f81t:82 br label %f83f:84 %ret = phi i64 [ %x, %entry], [ 42, %t]85 ret i64 %ret86}87 88define i64 @test_clear_mask_i64_i8(i64 %x) nounwind {89; CHECK-LABEL: test_clear_mask_i64_i8:90; CHECK: # %bb.0: # %entry91; CHECK-NEXT: movq %rdi, %rax92; CHECK-NEXT: testb %al, %al93; CHECK-NEXT: js .LBB4_294; CHECK-NEXT: # %bb.1: # %t95; CHECK-NEXT: movl $42, %eax96; CHECK-NEXT: .LBB4_2: # %f97; CHECK-NEXT: retq98entry:99 %a = and i64 %x, 128100 %r = icmp eq i64 %a, 0101 br i1 %r, label %t, label %f102t:103 br label %f104f:105 %ret = phi i64 [ %x, %entry], [ 42, %t]106 ret i64 %ret107}108 109define i64 @test_set_mask_i64_i8(i64 %x) nounwind {110; CHECK-LABEL: test_set_mask_i64_i8:111; CHECK: # %bb.0: # %entry112; CHECK-NEXT: movq %rdi, %rax113; CHECK-NEXT: testb %al, %al114; CHECK-NEXT: jns .LBB5_2115; CHECK-NEXT: # %bb.1: # %t116; CHECK-NEXT: movl $42, %eax117; CHECK-NEXT: .LBB5_2: # %f118; CHECK-NEXT: retq119entry:120 %a = and i64 %x, 128121 %r = icmp ne i64 %a, 0122 br i1 %r, label %t, label %f123t:124 br label %f125f:126 %ret = phi i64 [ %x, %entry], [ 42, %t]127 ret i64 %ret128}129 130define i32 @test_clear_mask_i32_i16(i32 %x) nounwind {131; CHECK-LABEL: test_clear_mask_i32_i16:132; CHECK: # %bb.0: # %entry133; CHECK-NEXT: movl %edi, %eax134; CHECK-NEXT: testw %ax, %ax135; CHECK-NEXT: js .LBB6_2136; CHECK-NEXT: # %bb.1: # %t137; CHECK-NEXT: movl $42, %eax138; CHECK-NEXT: .LBB6_2: # %f139; CHECK-NEXT: retq140entry:141 %a = and i32 %x, 32768142 %r = icmp eq i32 %a, 0143 br i1 %r, label %t, label %f144t:145 br label %f146f:147 %ret = phi i32 [ %x, %entry], [ 42, %t]148 ret i32 %ret149}150 151define i32 @test_set_mask_i32_i16(i32 %x) nounwind {152; CHECK-LABEL: test_set_mask_i32_i16:153; CHECK: # %bb.0: # %entry154; CHECK-NEXT: movl %edi, %eax155; CHECK-NEXT: testw %ax, %ax156; CHECK-NEXT: jns .LBB7_2157; CHECK-NEXT: # %bb.1: # %t158; CHECK-NEXT: movl $42, %eax159; CHECK-NEXT: .LBB7_2: # %f160; CHECK-NEXT: retq161entry:162 %a = and i32 %x, 32768163 %r = icmp ne i32 %a, 0164 br i1 %r, label %t, label %f165t:166 br label %f167f:168 %ret = phi i32 [ %x, %entry], [ 42, %t]169 ret i32 %ret170}171 172define i32 @test_clear_mask_i32_i8(i32 %x) nounwind {173; CHECK-LABEL: test_clear_mask_i32_i8:174; CHECK: # %bb.0: # %entry175; CHECK-NEXT: movl %edi, %eax176; CHECK-NEXT: testb %al, %al177; CHECK-NEXT: js .LBB8_2178; CHECK-NEXT: # %bb.1: # %t179; CHECK-NEXT: movl $42, %eax180; CHECK-NEXT: .LBB8_2: # %f181; CHECK-NEXT: retq182entry:183 %a = and i32 %x, 128184 %r = icmp eq i32 %a, 0185 br i1 %r, label %t, label %f186t:187 br label %f188f:189 %ret = phi i32 [ %x, %entry], [ 42, %t]190 ret i32 %ret191}192 193define i32 @test_set_mask_i32_i8(i32 %x) nounwind {194; CHECK-LABEL: test_set_mask_i32_i8:195; CHECK: # %bb.0: # %entry196; CHECK-NEXT: movl %edi, %eax197; CHECK-NEXT: testb %al, %al198; CHECK-NEXT: jns .LBB9_2199; CHECK-NEXT: # %bb.1: # %t200; CHECK-NEXT: movl $42, %eax201; CHECK-NEXT: .LBB9_2: # %f202; CHECK-NEXT: retq203entry:204 %a = and i32 %x, 128205 %r = icmp ne i32 %a, 0206 br i1 %r, label %t, label %f207t:208 br label %f209f:210 %ret = phi i32 [ %x, %entry], [ 42, %t]211 ret i32 %ret212}213 214define i16 @test_clear_mask_i16_i8(i16 %x) nounwind {215; CHECK-LABEL: test_clear_mask_i16_i8:216; CHECK: # %bb.0: # %entry217; CHECK-NEXT: movl %edi, %eax218; CHECK-NEXT: testb %al, %al219; CHECK-NEXT: js .LBB10_2220; CHECK-NEXT: # %bb.1: # %t221; CHECK-NEXT: movw $42, %ax222; CHECK-NEXT: .LBB10_2: # %f223; CHECK-NEXT: # kill: def $ax killed $ax killed $eax224; CHECK-NEXT: retq225entry:226 %a = and i16 %x, 128227 %r = icmp eq i16 %a, 0228 br i1 %r, label %t, label %f229t:230 br label %f231f:232 %ret = phi i16 [ %x, %entry], [ 42, %t]233 ret i16 %ret234}235 236define i16 @test_set_mask_i16_i8(i16 %x) nounwind {237; CHECK-LABEL: test_set_mask_i16_i8:238; CHECK: # %bb.0: # %entry239; CHECK-NEXT: movl %edi, %eax240; CHECK-NEXT: testb %al, %al241; CHECK-NEXT: jns .LBB11_2242; CHECK-NEXT: # %bb.1: # %t243; CHECK-NEXT: movw $42, %ax244; CHECK-NEXT: .LBB11_2: # %f245; CHECK-NEXT: # kill: def $ax killed $ax killed $eax246; CHECK-NEXT: retq247entry:248 %a = and i16 %x, 128249 %r = icmp ne i16 %a, 0250 br i1 %r, label %t, label %f251t:252 br label %f253f:254 %ret = phi i16 [ %x, %entry], [ 42, %t]255 ret i16 %ret256}257 258define i16 @test_set_mask_i16_i7(i16 %x) nounwind {259; CHECK-LABEL: test_set_mask_i16_i7:260; CHECK: # %bb.0: # %entry261; CHECK-NEXT: movl %edi, %eax262; CHECK-NEXT: testb $64, %al263; CHECK-NEXT: je .LBB12_2264; CHECK-NEXT: # %bb.1: # %t265; CHECK-NEXT: movw $42, %ax266; CHECK-NEXT: .LBB12_2: # %f267; CHECK-NEXT: # kill: def $ax killed $ax killed $eax268; CHECK-NEXT: retq269entry:270 %a = and i16 %x, 64271 %r = icmp ne i16 %a, 0272 br i1 %r, label %t, label %f273t:274 br label %f275f:276 %ret = phi i16 [ %x, %entry], [ 42, %t]277 ret i16 %ret278}279