436 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s3 4define i8 @sbb8rr(i8 %a, i8 %b, i8 %x, i8 %y) nounwind {5; CHECK-LABEL: sbb8rr:6; CHECK: # %bb.0:7; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]8; CHECK-NEXT: sbbb %sil, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x18,0xf7]9; CHECK-NEXT: retq # encoding: [0xc3]10 %s = sub i8 %a, %b11 %k = icmp ugt i8 %x, %y12 %z = zext i1 %k to i813 %r = sub i8 %s, %z14 ret i8 %r15}16 17define i16 @sbb16rr(i16 %a, i16 %b, i16 %x, i16 %y) nounwind {18; CHECK-LABEL: sbb16rr:19; CHECK: # %bb.0:20; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]21; CHECK-NEXT: sbbw %si, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x19,0xf7]22; CHECK-NEXT: retq # encoding: [0xc3]23 %s = sub i16 %a, %b24 %k = icmp ugt i16 %x, %y25 %z = zext i1 %k to i1626 %r = sub i16 %s, %z27 ret i16 %r28}29 30define i32 @sbb32rr(i32 %a, i32 %b, i32 %x, i32 %y) nounwind {31; CHECK-LABEL: sbb32rr:32; CHECK: # %bb.0:33; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]34; CHECK-NEXT: sbbl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x19,0xf7]35; CHECK-NEXT: retq # encoding: [0xc3]36 %s = sub i32 %a, %b37 %k = icmp ugt i32 %x, %y38 %z = zext i1 %k to i3239 %r = sub i32 %s, %z40 ret i32 %r41}42 43define i64 @sbb64rr(i64 %a, i64 %b, i64 %x, i64 %y) nounwind {44; CHECK-LABEL: sbb64rr:45; CHECK: # %bb.0:46; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]47; CHECK-NEXT: sbbq %rsi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x19,0xf7]48; CHECK-NEXT: retq # encoding: [0xc3]49 %s = sub i64 %a, %b50 %k = icmp ugt i64 %x, %y51 %z = zext i1 %k to i6452 %r = sub i64 %s, %z53 ret i64 %r54}55 56define i8 @sbb8rm(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {57; CHECK-LABEL: sbb8rm:58; CHECK: # %bb.0:59; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]60; CHECK-NEXT: sbbb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x1a,0x3e]61; CHECK-NEXT: retq # encoding: [0xc3]62 %b = load i8, ptr %ptr63 %s = sub i8 %a, %b64 %k = icmp ugt i8 %x, %y65 %z = zext i1 %k to i866 %r = sub i8 %s, %z67 ret i8 %r68}69 70define i16 @sbb16rm(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {71; CHECK-LABEL: sbb16rm:72; CHECK: # %bb.0:73; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]74; CHECK-NEXT: sbbw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x1b,0x3e]75; CHECK-NEXT: retq # encoding: [0xc3]76 %b = load i16, ptr %ptr77 %s = sub i16 %a, %b78 %k = icmp ugt i16 %x, %y79 %z = zext i1 %k to i1680 %r = sub i16 %s, %z81 ret i16 %r82}83 84define i32 @sbb32rm(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {85; CHECK-LABEL: sbb32rm:86; CHECK: # %bb.0:87; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]88; CHECK-NEXT: sbbl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x1b,0x3e]89; CHECK-NEXT: retq # encoding: [0xc3]90 %b = load i32, ptr %ptr91 %s = sub i32 %a, %b92 %k = icmp ugt i32 %x, %y93 %z = zext i1 %k to i3294 %r = sub i32 %s, %z95 ret i32 %r96}97 98define i64 @sbb64rm(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {99; CHECK-LABEL: sbb64rm:100; CHECK: # %bb.0:101; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]102; CHECK-NEXT: sbbq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x1b,0x3e]103; CHECK-NEXT: retq # encoding: [0xc3]104 %b = load i64, ptr %ptr105 %s = sub i64 %a, %b106 %k = icmp ugt i64 %x, %y107 %z = zext i1 %k to i64108 %r = sub i64 %s, %z109 ret i64 %r110}111 112define i16 @sbb16ri8(i16 %a, i16 %x, i16 %y) nounwind {113; CHECK-LABEL: sbb16ri8:114; CHECK: # %bb.0:115; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]116; CHECK-NEXT: sbbw $0, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xdf,0x00]117; CHECK-NEXT: addw $-123, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xc0,0x85]118; CHECK-NEXT: retq # encoding: [0xc3]119 %s = sub i16 %a, 123120 %k = icmp ugt i16 %x, %y121 %z = zext i1 %k to i16122 %r = sub i16 %s, %z123 ret i16 %r124}125 126define i32 @sbb32ri8(i32 %a, i32 %x, i32 %y) nounwind {127; CHECK-LABEL: sbb32ri8:128; CHECK: # %bb.0:129; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]130; CHECK-NEXT: sbbl $0, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xdf,0x00]131; CHECK-NEXT: addl $-123, %eax # EVEX TO LEGACY Compression encoding: [0x83,0xc0,0x85]132; CHECK-NEXT: retq # encoding: [0xc3]133 %s = sub i32 %a, 123134 %k = icmp ugt i32 %x, %y135 %z = zext i1 %k to i32136 %r = sub i32 %s, %z137 ret i32 %r138}139 140define i64 @sbb64ri8(i64 %a, i64 %x, i64 %y) nounwind {141; CHECK-LABEL: sbb64ri8:142; CHECK: # %bb.0:143; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]144; CHECK-NEXT: sbbq $0, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xdf,0x00]145; CHECK-NEXT: addq $-123, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xc0,0x85]146; CHECK-NEXT: retq # encoding: [0xc3]147 %s = sub i64 %a, 123148 %k = icmp ugt i64 %x, %y149 %z = zext i1 %k to i64150 %r = sub i64 %s, %z151 ret i64 %r152}153 154define i8 @sbb8ri(i8 %a, i8 %x, i8 %y) nounwind {155; CHECK-LABEL: sbb8ri:156; CHECK: # %bb.0:157; CHECK-NEXT: cmpb %sil, %dl # encoding: [0x40,0x38,0xf2]158; CHECK-NEXT: sbbb $0, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0xdf,0x00]159; CHECK-NEXT: addb $-123, %al # EVEX TO LEGACY Compression encoding: [0x04,0x85]160; CHECK-NEXT: retq # encoding: [0xc3]161 %s = sub i8 %a, 123162 %k = icmp ugt i8 %x, %y163 %z = zext i1 %k to i8164 %r = sub i8 %s, %z165 ret i8 %r166}167 168define i16 @sbb16ri(i16 %a, i16 %x, i16 %y) nounwind {169; CHECK-LABEL: sbb16ri:170; CHECK: # %bb.0:171; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]172; CHECK-NEXT: sbbw $0, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xdf,0x00]173; CHECK-NEXT: addw $-1234, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x05,0x2e,0xfb]174; CHECK-NEXT: # imm = 0xFB2E175; CHECK-NEXT: retq # encoding: [0xc3]176 %s = sub i16 %a, 1234177 %k = icmp ugt i16 %x, %y178 %z = zext i1 %k to i16179 %r = sub i16 %s, %z180 ret i16 %r181}182 183define i32 @sbb32ri(i32 %a, i32 %x, i32 %y) nounwind {184; CHECK-LABEL: sbb32ri:185; CHECK: # %bb.0:186; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]187; CHECK-NEXT: sbbl $0, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xdf,0x00]188; CHECK-NEXT: addl $-123456, %eax # EVEX TO LEGACY Compression encoding: [0x05,0xc0,0x1d,0xfe,0xff]189; CHECK-NEXT: # imm = 0xFFFE1DC0190; CHECK-NEXT: retq # encoding: [0xc3]191 %s = sub i32 %a, 123456192 %k = icmp ugt i32 %x, %y193 %z = zext i1 %k to i32194 %r = sub i32 %s, %z195 ret i32 %r196}197 198define i64 @sbb64ri(i64 %a, i64 %x, i64 %y) nounwind {199; CHECK-LABEL: sbb64ri:200; CHECK: # %bb.0:201; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]202; CHECK-NEXT: sbbq $0, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xdf,0x00]203; CHECK-NEXT: addq $-123456, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x05,0xc0,0x1d,0xfe,0xff]204; CHECK-NEXT: # imm = 0xFFFE1DC0205; CHECK-NEXT: retq # encoding: [0xc3]206 %s = sub i64 %a, 123456207 %k = icmp ugt i64 %x, %y208 %z = zext i1 %k to i64209 %r = sub i64 %s, %z210 ret i64 %r211}212 213define i8 @sbb8mr(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {214; CHECK-LABEL: sbb8mr:215; CHECK: # %bb.0:216; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]217; CHECK-NEXT: sbbb %dil, (%rsi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x18,0x3e]218; CHECK-NEXT: retq # encoding: [0xc3]219 %b = load i8, ptr %ptr220 %s = sub i8 %b, %a221 %k = icmp ugt i8 %x, %y222 %z = zext i1 %k to i8223 %r = sub i8 %s, %z224 ret i8 %r225}226 227define i16 @sbb16mr(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {228; CHECK-LABEL: sbb16mr:229; CHECK: # %bb.0:230; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]231; CHECK-NEXT: sbbw %di, (%rsi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x19,0x3e]232; CHECK-NEXT: retq # encoding: [0xc3]233 %b = load i16, ptr %ptr234 %s = sub i16 %b, %a235 %k = icmp ugt i16 %x, %y236 %z = zext i1 %k to i16237 %r = sub i16 %s, %z238 ret i16 %r239}240 241define i32 @sbb32mr(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {242; CHECK-LABEL: sbb32mr:243; CHECK: # %bb.0:244; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]245; CHECK-NEXT: sbbl %edi, (%rsi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x19,0x3e]246; CHECK-NEXT: retq # encoding: [0xc3]247 %b = load i32, ptr %ptr248 %s = sub i32 %b, %a249 %k = icmp ugt i32 %x, %y250 %z = zext i1 %k to i32251 %r = sub i32 %s, %z252 ret i32 %r253}254 255define i64 @sbb64mr(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {256; CHECK-LABEL: sbb64mr:257; CHECK: # %bb.0:258; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]259; CHECK-NEXT: sbbq %rdi, (%rsi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x19,0x3e]260; CHECK-NEXT: retq # encoding: [0xc3]261 %b = load i64, ptr %ptr262 %s = sub i64 %b, %a263 %k = icmp ugt i64 %x, %y264 %z = zext i1 %k to i64265 %r = sub i64 %s, %z266 ret i64 %r267}268 269define i16 @sbb16mi8(ptr %ptr, i16 %x, i16 %y) nounwind {270; CHECK-LABEL: sbb16mi8:271; CHECK: # %bb.0:272; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]273; CHECK-NEXT: sbbw $0, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x1f,0x00]274; CHECK-NEXT: addw $-123, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xc0,0x85]275; CHECK-NEXT: retq # encoding: [0xc3]276 %a = load i16, ptr %ptr277 %s = sub i16 %a, 123278 %k = icmp ugt i16 %x, %y279 %z = zext i1 %k to i16280 %r = sub i16 %s, %z281 ret i16 %r282}283 284define i32 @sbb32mi8(ptr %ptr, i32 %x, i32 %y) nounwind {285; CHECK-LABEL: sbb32mi8:286; CHECK: # %bb.0:287; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]288; CHECK-NEXT: sbbl $0, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x1f,0x00]289; CHECK-NEXT: addl $-123, %eax # EVEX TO LEGACY Compression encoding: [0x83,0xc0,0x85]290; CHECK-NEXT: retq # encoding: [0xc3]291 %a = load i32, ptr %ptr292 %s = sub i32 %a, 123293 %k = icmp ugt i32 %x, %y294 %z = zext i1 %k to i32295 %r = sub i32 %s, %z296 ret i32 %r297}298 299define i64 @sbb64mi8(ptr %ptr, i64 %x, i64 %y) nounwind {300; CHECK-LABEL: sbb64mi8:301; CHECK: # %bb.0:302; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]303; CHECK-NEXT: sbbq $0, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x1f,0x00]304; CHECK-NEXT: addq $-123, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xc0,0x85]305; CHECK-NEXT: retq # encoding: [0xc3]306 %a = load i64, ptr %ptr307 %s = sub i64 %a, 123308 %k = icmp ugt i64 %x, %y309 %z = zext i1 %k to i64310 %r = sub i64 %s, %z311 ret i64 %r312}313 314define i8 @sbb8mi(ptr %ptr, i8 %x, i8 %y) nounwind {315; CHECK-LABEL: sbb8mi:316; CHECK: # %bb.0:317; CHECK-NEXT: cmpb %sil, %dl # encoding: [0x40,0x38,0xf2]318; CHECK-NEXT: sbbb $0, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0x1f,0x00]319; CHECK-NEXT: addb $-123, %al # EVEX TO LEGACY Compression encoding: [0x04,0x85]320; CHECK-NEXT: retq # encoding: [0xc3]321 %a = load i8, ptr %ptr322 %s = sub i8 %a, 123323 %k = icmp ugt i8 %x, %y324 %z = zext i1 %k to i8325 %r = sub i8 %s, %z326 ret i8 %r327}328 329define i16 @sbb16mi(ptr %ptr, i16 %x, i16 %y) nounwind {330; CHECK-LABEL: sbb16mi:331; CHECK: # %bb.0:332; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]333; CHECK-NEXT: sbbw $0, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x1f,0x00]334; CHECK-NEXT: addw $-1234, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x05,0x2e,0xfb]335; CHECK-NEXT: # imm = 0xFB2E336; CHECK-NEXT: retq # encoding: [0xc3]337 %a = load i16, ptr %ptr338 %s = sub i16 %a, 1234339 %k = icmp ugt i16 %x, %y340 %z = zext i1 %k to i16341 %r = sub i16 %s, %z342 ret i16 %r343}344 345define i32 @sbb32mi(ptr %ptr, i32 %x, i32 %y) nounwind {346; CHECK-LABEL: sbb32mi:347; CHECK: # %bb.0:348; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]349; CHECK-NEXT: sbbl $0, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x1f,0x00]350; CHECK-NEXT: addl $-123456, %eax # EVEX TO LEGACY Compression encoding: [0x05,0xc0,0x1d,0xfe,0xff]351; CHECK-NEXT: # imm = 0xFFFE1DC0352; CHECK-NEXT: retq # encoding: [0xc3]353 %a = load i32, ptr %ptr354 %s = sub i32 %a, 123456355 %k = icmp ugt i32 %x, %y356 %z = zext i1 %k to i32357 %r = sub i32 %s, %z358 ret i32 %r359}360 361define i64 @sbb64mi(ptr %ptr, i64 %x, i64 %y) nounwind {362; CHECK-LABEL: sbb64mi:363; CHECK: # %bb.0:364; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]365; CHECK-NEXT: sbbq $0, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x1f,0x00]366; CHECK-NEXT: addq $-123456, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x05,0xc0,0x1d,0xfe,0xff]367; CHECK-NEXT: # imm = 0xFFFE1DC0368; CHECK-NEXT: retq # encoding: [0xc3]369 %a = load i64, ptr %ptr370 %s = sub i64 %a, 123456371 %k = icmp ugt i64 %x, %y372 %z = zext i1 %k to i64373 %r = sub i64 %s, %z374 ret i64 %r375}376 377define void @sbb8mr_legacy(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {378; CHECK-LABEL: sbb8mr_legacy:379; CHECK: # %bb.0:380; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]381; CHECK-NEXT: sbbb %dil, (%rsi) # encoding: [0x40,0x18,0x3e]382; CHECK-NEXT: retq # encoding: [0xc3]383 %b = load i8, ptr %ptr384 %s = sub i8 %b, %a385 %k = icmp ugt i8 %x, %y386 %z = zext i1 %k to i8387 %r = sub i8 %s, %z388 store i8 %r, ptr %ptr389 ret void390}391 392define void @sbb16mr_legacy(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {393; CHECK-LABEL: sbb16mr_legacy:394; CHECK: # %bb.0:395; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]396; CHECK-NEXT: sbbw %di, (%rsi) # encoding: [0x66,0x19,0x3e]397; CHECK-NEXT: retq # encoding: [0xc3]398 %b = load i16, ptr %ptr399 %s = sub i16 %b, %a400 %k = icmp ugt i16 %x, %y401 %z = zext i1 %k to i16402 %r = sub i16 %s, %z403 store i16 %r, ptr %ptr404 ret void405}406 407define void @sbb32mr_legacy(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {408; CHECK-LABEL: sbb32mr_legacy:409; CHECK: # %bb.0:410; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]411; CHECK-NEXT: sbbl %edi, (%rsi) # encoding: [0x19,0x3e]412; CHECK-NEXT: retq # encoding: [0xc3]413 %b = load i32, ptr %ptr414 %s = sub i32 %b, %a415 %k = icmp ugt i32 %x, %y416 %z = zext i1 %k to i32417 %r = sub i32 %s, %z418 store i32 %r, ptr %ptr419 ret void420}421 422define void @sbb64mr_legacy(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {423; CHECK-LABEL: sbb64mr_legacy:424; CHECK: # %bb.0:425; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]426; CHECK-NEXT: sbbq %rdi, (%rsi) # encoding: [0x48,0x19,0x3e]427; CHECK-NEXT: retq # encoding: [0xc3]428 %b = load i64, ptr %ptr429 %s = sub i64 %b, %a430 %k = icmp ugt i64 %x, %y431 %z = zext i1 %k to i64432 %r = sub i64 %s, %z433 store i64 %r, ptr %ptr434 ret void435}436