485 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 @adc8rr(i8 %a, i8 %b, i8 %x, i8 %y) nounwind {5; CHECK-LABEL: adc8rr:6; CHECK: # %bb.0:7; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]8; CHECK-NEXT: adcb %sil, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x10,0xf7]9; CHECK-NEXT: retq # encoding: [0xc3]10 %s = add i8 %a, %b11 %k = icmp ugt i8 %x, %y12 %z = zext i1 %k to i813 %r = add i8 %s, %z14 ret i8 %r15}16 17define i16 @adc16rr(i16 %a, i16 %b, i16 %x, i16 %y) nounwind {18; CHECK-LABEL: adc16rr:19; CHECK: # %bb.0:20; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]21; CHECK-NEXT: adcw %si, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x11,0xf7]22; CHECK-NEXT: retq # encoding: [0xc3]23 %s = add i16 %a, %b24 %k = icmp ugt i16 %x, %y25 %z = zext i1 %k to i1626 %r = add i16 %s, %z27 ret i16 %r28}29 30define i32 @adc32rr(i32 %a, i32 %b, i32 %x, i32 %y) nounwind {31; CHECK-LABEL: adc32rr:32; CHECK: # %bb.0:33; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]34; CHECK-NEXT: adcl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x11,0xf7]35; CHECK-NEXT: retq # encoding: [0xc3]36 %s = add i32 %a, %b37 %k = icmp ugt i32 %x, %y38 %z = zext i1 %k to i3239 %r = add i32 %s, %z40 ret i32 %r41}42 43define i64 @adc64rr(i64 %a, i64 %b, i64 %x, i64 %y) nounwind {44; CHECK-LABEL: adc64rr:45; CHECK: # %bb.0:46; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]47; CHECK-NEXT: adcq %rsi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x11,0xf7]48; CHECK-NEXT: retq # encoding: [0xc3]49 %s = add i64 %a, %b50 %k = icmp ugt i64 %x, %y51 %z = zext i1 %k to i6452 %r = add i64 %s, %z53 ret i64 %r54}55 56define i8 @adc8rm(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {57; CHECK-LABEL: adc8rm:58; CHECK: # %bb.0:59; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]60; CHECK-NEXT: adcb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x12,0x3e]61; CHECK-NEXT: retq # encoding: [0xc3]62 %b = load i8, ptr %ptr63 %s = add i8 %a, %b64 %k = icmp ugt i8 %x, %y65 %z = zext i1 %k to i866 %r = add i8 %s, %z67 ret i8 %r68}69 70define i16 @adc16rm(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {71; CHECK-LABEL: adc16rm:72; CHECK: # %bb.0:73; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]74; CHECK-NEXT: adcw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x13,0x3e]75; CHECK-NEXT: retq # encoding: [0xc3]76 %b = load i16, ptr %ptr77 %s = add i16 %a, %b78 %k = icmp ugt i16 %x, %y79 %z = zext i1 %k to i1680 %r = add i16 %s, %z81 ret i16 %r82}83 84define i32 @adc32rm(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {85; CHECK-LABEL: adc32rm:86; CHECK: # %bb.0:87; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]88; CHECK-NEXT: adcl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x13,0x3e]89; CHECK-NEXT: retq # encoding: [0xc3]90 %b = load i32, ptr %ptr91 %s = add i32 %a, %b92 %k = icmp ugt i32 %x, %y93 %z = zext i1 %k to i3294 %r = add i32 %s, %z95 ret i32 %r96}97 98define i64 @adc64rm(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {99; CHECK-LABEL: adc64rm:100; CHECK: # %bb.0:101; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]102; CHECK-NEXT: adcq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x13,0x3e]103; CHECK-NEXT: retq # encoding: [0xc3]104 %b = load i64, ptr %ptr105 %s = add i64 %a, %b106 %k = icmp ugt i64 %x, %y107 %z = zext i1 %k to i64108 %r = add i64 %s, %z109 ret i64 %r110}111 112define i16 @adc16ri8(i16 %a, i16 %x, i16 %y) nounwind {113; CHECK-LABEL: adc16ri8:114; CHECK: # %bb.0:115; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]116; CHECK-NEXT: adcw $123, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xd7,0x7b]117; CHECK-NEXT: retq # encoding: [0xc3]118 %s = add i16 %a, 123119 %k = icmp ugt i16 %x, %y120 %z = zext i1 %k to i16121 %r = add i16 %s, %z122 ret i16 %r123}124 125define i32 @adc32ri8(i32 %a, i32 %x, i32 %y) nounwind {126; CHECK-LABEL: adc32ri8:127; CHECK: # %bb.0:128; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]129; CHECK-NEXT: adcl $123, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xd7,0x7b]130; CHECK-NEXT: retq # encoding: [0xc3]131 %s = add i32 %a, 123132 %k = icmp ugt i32 %x, %y133 %z = zext i1 %k to i32134 %r = add i32 %s, %z135 ret i32 %r136}137 138define i64 @adc64ri8(i64 %a, i64 %x, i64 %y) nounwind {139; CHECK-LABEL: adc64ri8:140; CHECK: # %bb.0:141; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]142; CHECK-NEXT: adcq $123, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xd7,0x7b]143; CHECK-NEXT: retq # encoding: [0xc3]144 %s = add i64 %a, 123145 %k = icmp ugt i64 %x, %y146 %z = zext i1 %k to i64147 %r = add i64 %s, %z148 ret i64 %r149}150 151define i8 @adc8ri(i8 %a, i8 %x, i8 %y) nounwind {152; CHECK-LABEL: adc8ri:153; CHECK: # %bb.0:154; CHECK-NEXT: cmpb %sil, %dl # encoding: [0x40,0x38,0xf2]155; CHECK-NEXT: adcb $123, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0xd7,0x7b]156; CHECK-NEXT: retq # encoding: [0xc3]157 %s = add i8 %a, 123158 %k = icmp ugt i8 %x, %y159 %z = zext i1 %k to i8160 %r = add i8 %s, %z161 ret i8 %r162}163 164define i16 @adc16ri(i16 %a, i16 %x, i16 %y) nounwind {165; CHECK-LABEL: adc16ri:166; CHECK: # %bb.0:167; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]168; CHECK-NEXT: adcw $1234, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0xd7,0xd2,0x04]169; CHECK-NEXT: # imm = 0x4D2170; CHECK-NEXT: retq # encoding: [0xc3]171 %s = add i16 %a, 1234172 %k = icmp ugt i16 %x, %y173 %z = zext i1 %k to i16174 %r = add i16 %s, %z175 ret i16 %r176}177 178define i32 @adc32ri(i32 %a, i32 %x, i32 %y) nounwind {179; CHECK-LABEL: adc32ri:180; CHECK: # %bb.0:181; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]182; CHECK-NEXT: adcl $123456, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0xd7,0x40,0xe2,0x01,0x00]183; CHECK-NEXT: # imm = 0x1E240184; CHECK-NEXT: retq # encoding: [0xc3]185 %s = add i32 %a, 123456186 %k = icmp ugt i32 %x, %y187 %z = zext i1 %k to i32188 %r = add i32 %s, %z189 ret i32 %r190}191 192define i64 @adc64ri(i64 %a, i64 %x, i64 %y) nounwind {193; CHECK-LABEL: adc64ri:194; CHECK: # %bb.0:195; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]196; CHECK-NEXT: adcq $123456, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0xd7,0x40,0xe2,0x01,0x00]197; CHECK-NEXT: # imm = 0x1E240198; CHECK-NEXT: retq # encoding: [0xc3]199 %s = add i64 %a, 123456200 %k = icmp ugt i64 %x, %y201 %z = zext i1 %k to i64202 %r = add i64 %s, %z203 ret i64 %r204}205 206define i8 @adc8mr(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {207; CHECK-LABEL: adc8mr:208; CHECK: # %bb.0:209; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]210; CHECK-NEXT: adcb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x12,0x3e]211; CHECK-NEXT: retq # encoding: [0xc3]212 %b = load i8, ptr %ptr213 %s = add i8 %b, %a214 %k = icmp ugt i8 %x, %y215 %z = zext i1 %k to i8216 %r = add i8 %s, %z217 ret i8 %r218}219 220define i16 @adc16mr(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {221; CHECK-LABEL: adc16mr:222; CHECK: # %bb.0:223; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]224; CHECK-NEXT: adcw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x13,0x3e]225; CHECK-NEXT: retq # encoding: [0xc3]226 %b = load i16, ptr %ptr227 %s = add i16 %b, %a228 %k = icmp ugt i16 %x, %y229 %z = zext i1 %k to i16230 %r = add i16 %s, %z231 ret i16 %r232}233 234define i32 @adc32mr(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {235; CHECK-LABEL: adc32mr:236; CHECK: # %bb.0:237; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]238; CHECK-NEXT: adcl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x13,0x3e]239; CHECK-NEXT: retq # encoding: [0xc3]240 %b = load i32, ptr %ptr241 %s = add i32 %b, %a242 %k = icmp ugt i32 %x, %y243 %z = zext i1 %k to i32244 %r = add i32 %s, %z245 ret i32 %r246}247 248define i64 @adc64mr(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {249; CHECK-LABEL: adc64mr:250; CHECK: # %bb.0:251; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]252; CHECK-NEXT: adcq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x13,0x3e]253; CHECK-NEXT: retq # encoding: [0xc3]254 %b = load i64, ptr %ptr255 %s = add i64 %b, %a256 %k = icmp ugt i64 %x, %y257 %z = zext i1 %k to i64258 %r = add i64 %s, %z259 ret i64 %r260}261 262define i16 @adc16mi8(ptr %ptr, i16 %x, i16 %y) nounwind {263; CHECK-LABEL: adc16mi8:264; CHECK: # %bb.0:265; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]266; CHECK-NEXT: adcw $123, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x17,0x7b]267; CHECK-NEXT: retq # encoding: [0xc3]268 %a = load i16, ptr %ptr269 %s = add i16 %a, 123270 %k = icmp ugt i16 %x, %y271 %z = zext i1 %k to i16272 %r = add i16 %s, %z273 ret i16 %r274}275 276define i32 @adc32mi8(ptr %ptr, i32 %x, i32 %y) nounwind {277; CHECK-LABEL: adc32mi8:278; CHECK: # %bb.0:279; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]280; CHECK-NEXT: adcl $123, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x17,0x7b]281; CHECK-NEXT: retq # encoding: [0xc3]282 %a = load i32, ptr %ptr283 %s = add i32 %a, 123284 %k = icmp ugt i32 %x, %y285 %z = zext i1 %k to i32286 %r = add i32 %s, %z287 ret i32 %r288}289 290define i64 @adc64mi8(ptr %ptr, i64 %x, i64 %y) nounwind {291; CHECK-LABEL: adc64mi8:292; CHECK: # %bb.0:293; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]294; CHECK-NEXT: adcq $123, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x17,0x7b]295; CHECK-NEXT: retq # encoding: [0xc3]296 %a = load i64, ptr %ptr297 %s = add i64 %a, 123298 %k = icmp ugt i64 %x, %y299 %z = zext i1 %k to i64300 %r = add i64 %s, %z301 ret i64 %r302}303 304define i8 @adc8mi(ptr %ptr, i8 %x, i8 %y) nounwind {305; CHECK-LABEL: adc8mi:306; CHECK: # %bb.0:307; CHECK-NEXT: cmpb %sil, %dl # encoding: [0x40,0x38,0xf2]308; CHECK-NEXT: adcb $123, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0x17,0x7b]309; CHECK-NEXT: retq # encoding: [0xc3]310 %a = load i8, ptr %ptr311 %s = add i8 %a, 123312 %k = icmp ugt i8 %x, %y313 %z = zext i1 %k to i8314 %r = add i8 %s, %z315 ret i8 %r316}317 318define i16 @adc16mi(ptr %ptr, i16 %x, i16 %y) nounwind {319; CHECK-LABEL: adc16mi:320; CHECK: # %bb.0:321; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]322; CHECK-NEXT: adcw $1234, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0x17,0xd2,0x04]323; CHECK-NEXT: # imm = 0x4D2324; CHECK-NEXT: retq # encoding: [0xc3]325 %a = load i16, ptr %ptr326 %s = add i16 %a, 1234327 %k = icmp ugt i16 %x, %y328 %z = zext i1 %k to i16329 %r = add i16 %s, %z330 ret i16 %r331}332 333define i32 @adc32mi(ptr %ptr, i32 %x, i32 %y) nounwind {334; CHECK-LABEL: adc32mi:335; CHECK: # %bb.0:336; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]337; CHECK-NEXT: adcl $123456, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0x17,0x40,0xe2,0x01,0x00]338; CHECK-NEXT: # imm = 0x1E240339; CHECK-NEXT: retq # encoding: [0xc3]340 %a = load i32, ptr %ptr341 %s = add i32 %a, 123456342 %k = icmp ugt i32 %x, %y343 %z = zext i1 %k to i32344 %r = add i32 %s, %z345 ret i32 %r346}347 348define i64 @adc64mi(ptr %ptr, i64 %x, i64 %y) nounwind {349; CHECK-LABEL: adc64mi:350; CHECK: # %bb.0:351; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]352; CHECK-NEXT: adcq $123456, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0x17,0x40,0xe2,0x01,0x00]353; CHECK-NEXT: # imm = 0x1E240354; CHECK-NEXT: retq # encoding: [0xc3]355 %a = load i64, ptr %ptr356 %s = add i64 %a, 123456357 %k = icmp ugt i64 %x, %y358 %z = zext i1 %k to i64359 %r = add i64 %s, %z360 ret i64 %r361}362 363define void @adc8mr_legacy(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {364; CHECK-LABEL: adc8mr_legacy:365; CHECK: # %bb.0:366; CHECK-NEXT: cmpb %dl, %cl # encoding: [0x38,0xd1]367; CHECK-NEXT: adcb %dil, (%rsi) # encoding: [0x40,0x10,0x3e]368; CHECK-NEXT: retq # encoding: [0xc3]369 %b = load i8, ptr %ptr370 %s = add i8 %b, %a371 %k = icmp ugt i8 %x, %y372 %z = zext i1 %k to i8373 %r = add i8 %s, %z374 store i8 %r, ptr %ptr375 ret void376}377 378define void @adc16mr_legacy(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {379; CHECK-LABEL: adc16mr_legacy:380; CHECK: # %bb.0:381; CHECK-NEXT: cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]382; CHECK-NEXT: adcw %di, (%rsi) # encoding: [0x66,0x11,0x3e]383; CHECK-NEXT: retq # encoding: [0xc3]384 %b = load i16, ptr %ptr385 %s = add i16 %b, %a386 %k = icmp ugt i16 %x, %y387 %z = zext i1 %k to i16388 %r = add i16 %s, %z389 store i16 %r, ptr %ptr390 ret void391}392 393define void @adc32mr_legacy(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {394; CHECK-LABEL: adc32mr_legacy:395; CHECK: # %bb.0:396; CHECK-NEXT: cmpl %edx, %ecx # encoding: [0x39,0xd1]397; CHECK-NEXT: adcl %edi, (%rsi) # encoding: [0x11,0x3e]398; CHECK-NEXT: retq # encoding: [0xc3]399 %b = load i32, ptr %ptr400 %s = add i32 %b, %a401 %k = icmp ugt i32 %x, %y402 %z = zext i1 %k to i32403 %r = add i32 %s, %z404 store i32 %r, ptr %ptr405 ret void406}407 408define void @adc64mr_legacy(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {409; CHECK-LABEL: adc64mr_legacy:410; CHECK: # %bb.0:411; CHECK-NEXT: cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]412; CHECK-NEXT: adcq %rdi, (%rsi) # encoding: [0x48,0x11,0x3e]413; CHECK-NEXT: retq # encoding: [0xc3]414 %b = load i64, ptr %ptr415 %s = add i64 %b, %a416 %k = icmp ugt i64 %x, %y417 %z = zext i1 %k to i64418 %r = add i64 %s, %z419 store i64 %r, ptr %ptr420 ret void421}422 423define void @adc8mi_legacy(ptr %ptr, i8 %x, i8 %y) nounwind {424; CHECK-LABEL: adc8mi_legacy:425; CHECK: # %bb.0:426; CHECK-NEXT: cmpb %sil, %dl # encoding: [0x40,0x38,0xf2]427; CHECK-NEXT: adcb $123, (%rdi) # encoding: [0x80,0x17,0x7b]428; CHECK-NEXT: retq # encoding: [0xc3]429 %a = load i8, ptr %ptr430 %s = add i8 %a, 123431 %k = icmp ugt i8 %x, %y432 %z = zext i1 %k to i8433 %r = add i8 %s, %z434 store i8 %r, ptr %ptr435 ret void436}437 438define void @adc16mi_legacy(ptr %ptr, i16 %x, i16 %y) nounwind {439; CHECK-LABEL: adc16mi_legacy:440; CHECK: # %bb.0:441; CHECK-NEXT: cmpw %si, %dx # encoding: [0x66,0x39,0xf2]442; CHECK-NEXT: adcw $1234, (%rdi) # encoding: [0x66,0x81,0x17,0xd2,0x04]443; CHECK-NEXT: # imm = 0x4D2444; CHECK-NEXT: retq # encoding: [0xc3]445 %a = load i16, ptr %ptr446 %s = add i16 %a, 1234447 %k = icmp ugt i16 %x, %y448 %z = zext i1 %k to i16449 %r = add i16 %s, %z450 store i16 %r, ptr %ptr451 ret void452}453 454define void @adc32mi_legacy(ptr %ptr, i32 %x, i32 %y) nounwind {455; CHECK-LABEL: adc32mi_legacy:456; CHECK: # %bb.0:457; CHECK-NEXT: cmpl %esi, %edx # encoding: [0x39,0xf2]458; CHECK-NEXT: adcl $123456, (%rdi) # encoding: [0x81,0x17,0x40,0xe2,0x01,0x00]459; CHECK-NEXT: # imm = 0x1E240460; CHECK-NEXT: retq # encoding: [0xc3]461 %a = load i32, ptr %ptr462 %s = add i32 %a, 123456463 %k = icmp ugt i32 %x, %y464 %z = zext i1 %k to i32465 %r = add i32 %s, %z466 store i32 %r, ptr %ptr467 ret void468}469 470define void @adc64mi_legacy(ptr %ptr, i64 %x, i64 %y) nounwind {471; CHECK-LABEL: adc64mi_legacy:472; CHECK: # %bb.0:473; CHECK-NEXT: cmpq %rsi, %rdx # encoding: [0x48,0x39,0xf2]474; CHECK-NEXT: adcq $123456, (%rdi) # encoding: [0x48,0x81,0x17,0x40,0xe2,0x01,0x00]475; CHECK-NEXT: # imm = 0x1E240476; CHECK-NEXT: retq # encoding: [0xc3]477 %a = load i64, ptr %ptr478 %s = add i64 %a, 123456479 %k = icmp ugt i64 %x, %y480 %z = zext i1 %k to i64481 %r = add i64 %s, %z482 store i64 %r, ptr %ptr483 ret void484}485