1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s 3 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, %b 11 %k = icmp ugt i8 %x, %y 12 %z = zext i1 %k to i8 13 %r = sub i8 %s, %z 14 ret i8 %r 15} 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, %b 24 %k = icmp ugt i16 %x, %y 25 %z = zext i1 %k to i16 26 %r = sub i16 %s, %z 27 ret i16 %r 28} 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, %b 37 %k = icmp ugt i32 %x, %y 38 %z = zext i1 %k to i32 39 %r = sub i32 %s, %z 40 ret i32 %r 41} 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, %b 50 %k = icmp ugt i64 %x, %y 51 %z = zext i1 %k to i64 52 %r = sub i64 %s, %z 53 ret i64 %r 54} 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 %ptr 63 %s = sub i8 %a, %b 64 %k = icmp ugt i8 %x, %y 65 %z = zext i1 %k to i8 66 %r = sub i8 %s, %z 67 ret i8 %r 68} 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 %ptr 77 %s = sub i16 %a, %b 78 %k = icmp ugt i16 %x, %y 79 %z = zext i1 %k to i16 80 %r = sub i16 %s, %z 81 ret i16 %r 82} 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 %ptr 91 %s = sub i32 %a, %b 92 %k = icmp ugt i32 %x, %y 93 %z = zext i1 %k to i32 94 %r = sub i32 %s, %z 95 ret i32 %r 96} 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 %ptr 105 %s = sub i64 %a, %b 106 %k = icmp ugt i64 %x, %y 107 %z = zext i1 %k to i64 108 %r = sub i64 %s, %z 109 ret i64 %r 110} 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, 123 120 %k = icmp ugt i16 %x, %y 121 %z = zext i1 %k to i16 122 %r = sub i16 %s, %z 123 ret i16 %r 124} 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, 123 134 %k = icmp ugt i32 %x, %y 135 %z = zext i1 %k to i32 136 %r = sub i32 %s, %z 137 ret i32 %r 138} 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, 123 148 %k = icmp ugt i64 %x, %y 149 %z = zext i1 %k to i64 150 %r = sub i64 %s, %z 151 ret i64 %r 152} 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, 123 162 %k = icmp ugt i8 %x, %y 163 %z = zext i1 %k to i8 164 %r = sub i8 %s, %z 165 ret i8 %r 166} 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 = 0xFB2E 175; CHECK-NEXT: retq # encoding: [0xc3] 176 %s = sub i16 %a, 1234 177 %k = icmp ugt i16 %x, %y 178 %z = zext i1 %k to i16 179 %r = sub i16 %s, %z 180 ret i16 %r 181} 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 = 0xFFFE1DC0 190; CHECK-NEXT: retq # encoding: [0xc3] 191 %s = sub i32 %a, 123456 192 %k = icmp ugt i32 %x, %y 193 %z = zext i1 %k to i32 194 %r = sub i32 %s, %z 195 ret i32 %r 196} 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 = 0xFFFE1DC0 205; CHECK-NEXT: retq # encoding: [0xc3] 206 %s = sub i64 %a, 123456 207 %k = icmp ugt i64 %x, %y 208 %z = zext i1 %k to i64 209 %r = sub i64 %s, %z 210 ret i64 %r 211} 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 %ptr 220 %s = sub i8 %b, %a 221 %k = icmp ugt i8 %x, %y 222 %z = zext i1 %k to i8 223 %r = sub i8 %s, %z 224 ret i8 %r 225} 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 %ptr 234 %s = sub i16 %b, %a 235 %k = icmp ugt i16 %x, %y 236 %z = zext i1 %k to i16 237 %r = sub i16 %s, %z 238 ret i16 %r 239} 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 %ptr 248 %s = sub i32 %b, %a 249 %k = icmp ugt i32 %x, %y 250 %z = zext i1 %k to i32 251 %r = sub i32 %s, %z 252 ret i32 %r 253} 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 %ptr 262 %s = sub i64 %b, %a 263 %k = icmp ugt i64 %x, %y 264 %z = zext i1 %k to i64 265 %r = sub i64 %s, %z 266 ret i64 %r 267} 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 %ptr 277 %s = sub i16 %a, 123 278 %k = icmp ugt i16 %x, %y 279 %z = zext i1 %k to i16 280 %r = sub i16 %s, %z 281 ret i16 %r 282} 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 %ptr 292 %s = sub i32 %a, 123 293 %k = icmp ugt i32 %x, %y 294 %z = zext i1 %k to i32 295 %r = sub i32 %s, %z 296 ret i32 %r 297} 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 %ptr 307 %s = sub i64 %a, 123 308 %k = icmp ugt i64 %x, %y 309 %z = zext i1 %k to i64 310 %r = sub i64 %s, %z 311 ret i64 %r 312} 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 %ptr 322 %s = sub i8 %a, 123 323 %k = icmp ugt i8 %x, %y 324 %z = zext i1 %k to i8 325 %r = sub i8 %s, %z 326 ret i8 %r 327} 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 = 0xFB2E 336; CHECK-NEXT: retq # encoding: [0xc3] 337 %a = load i16, ptr %ptr 338 %s = sub i16 %a, 1234 339 %k = icmp ugt i16 %x, %y 340 %z = zext i1 %k to i16 341 %r = sub i16 %s, %z 342 ret i16 %r 343} 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 = 0xFFFE1DC0 352; CHECK-NEXT: retq # encoding: [0xc3] 353 %a = load i32, ptr %ptr 354 %s = sub i32 %a, 123456 355 %k = icmp ugt i32 %x, %y 356 %z = zext i1 %k to i32 357 %r = sub i32 %s, %z 358 ret i32 %r 359} 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 = 0xFFFE1DC0 368; CHECK-NEXT: retq # encoding: [0xc3] 369 %a = load i64, ptr %ptr 370 %s = sub i64 %a, 123456 371 %k = icmp ugt i64 %x, %y 372 %z = zext i1 %k to i64 373 %r = sub i64 %s, %z 374 ret i64 %r 375} 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 %ptr 384 %s = sub i8 %b, %a 385 %k = icmp ugt i8 %x, %y 386 %z = zext i1 %k to i8 387 %r = sub i8 %s, %z 388 store i8 %r, ptr %ptr 389 ret void 390} 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 %ptr 399 %s = sub i16 %b, %a 400 %k = icmp ugt i16 %x, %y 401 %z = zext i1 %k to i16 402 %r = sub i16 %s, %z 403 store i16 %r, ptr %ptr 404 ret void 405} 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 %ptr 414 %s = sub i32 %b, %a 415 %k = icmp ugt i32 %x, %y 416 %z = zext i1 %k to i32 417 %r = sub i32 %s, %z 418 store i32 %r, ptr %ptr 419 ret void 420} 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 %ptr 429 %s = sub i64 %b, %a 430 %k = icmp ugt i64 %x, %y 431 %z = zext i1 %k to i64 432 %r = sub i64 %s, %z 433 store i64 %r, ptr %ptr 434 ret void 435} 436