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; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s 4 5define i8 @sub8rr(i8 noundef %a, i8 noundef %b) { 6; CHECK-LABEL: sub8rr: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: subb %sil, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x28,0xf7] 9; CHECK-NEXT: retq # encoding: [0xc3] 10; 11; NF-LABEL: sub8rr: 12; NF: # %bb.0: # %entry 13; NF-NEXT: {nf} subb %sil, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x28,0xf7] 14; NF-NEXT: retq # encoding: [0xc3] 15entry: 16 %sub = sub i8 %a, %b 17 ret i8 %sub 18} 19 20define i16 @sub16rr(i16 noundef %a, i16 noundef %b) { 21; CHECK-LABEL: sub16rr: 22; CHECK: # %bb.0: # %entry 23; CHECK-NEXT: subw %si, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x29,0xf7] 24; CHECK-NEXT: retq # encoding: [0xc3] 25; 26; NF-LABEL: sub16rr: 27; NF: # %bb.0: # %entry 28; NF-NEXT: {nf} subw %si, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x29,0xf7] 29; NF-NEXT: retq # encoding: [0xc3] 30entry: 31 %sub = sub i16 %a, %b 32 ret i16 %sub 33} 34 35define i32 @sub32rr(i32 noundef %a, i32 noundef %b) { 36; CHECK-LABEL: sub32rr: 37; CHECK: # %bb.0: # %entry 38; CHECK-NEXT: subl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x29,0xf7] 39; CHECK-NEXT: retq # encoding: [0xc3] 40; 41; NF-LABEL: sub32rr: 42; NF: # %bb.0: # %entry 43; NF-NEXT: {nf} subl %esi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x29,0xf7] 44; NF-NEXT: retq # encoding: [0xc3] 45entry: 46 %sub = sub i32 %a, %b 47 ret i32 %sub 48} 49 50define i64 @sub64rr(i64 noundef %a, i64 noundef %b) { 51; CHECK-LABEL: sub64rr: 52; CHECK: # %bb.0: # %entry 53; CHECK-NEXT: subq %rsi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x29,0xf7] 54; CHECK-NEXT: retq # encoding: [0xc3] 55; 56; NF-LABEL: sub64rr: 57; NF: # %bb.0: # %entry 58; NF-NEXT: {nf} subq %rsi, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x29,0xf7] 59; NF-NEXT: retq # encoding: [0xc3] 60entry: 61 %sub = sub i64 %a, %b 62 ret i64 %sub 63} 64 65define i8 @sub8rm(i8 noundef %a, ptr %ptr) { 66; CHECK-LABEL: sub8rm: 67; CHECK: # %bb.0: # %entry 68; CHECK-NEXT: subb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x2a,0x3e] 69; CHECK-NEXT: retq # encoding: [0xc3] 70; 71; NF-LABEL: sub8rm: 72; NF: # %bb.0: # %entry 73; NF-NEXT: {nf} subb (%rsi), %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x2a,0x3e] 74; NF-NEXT: retq # encoding: [0xc3] 75entry: 76 %b = load i8, ptr %ptr 77 %sub = sub i8 %a, %b 78 ret i8 %sub 79} 80 81define i16 @sub16rm(i16 noundef %a, ptr %ptr) { 82; CHECK-LABEL: sub16rm: 83; CHECK: # %bb.0: # %entry 84; CHECK-NEXT: subw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x2b,0x3e] 85; CHECK-NEXT: retq # encoding: [0xc3] 86; 87; NF-LABEL: sub16rm: 88; NF: # %bb.0: # %entry 89; NF-NEXT: {nf} subw (%rsi), %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x2b,0x3e] 90; NF-NEXT: retq # encoding: [0xc3] 91entry: 92 %b = load i16, ptr %ptr 93 %sub = sub i16 %a, %b 94 ret i16 %sub 95} 96 97define i32 @sub32rm(i32 noundef %a, ptr %ptr) { 98; CHECK-LABEL: sub32rm: 99; CHECK: # %bb.0: # %entry 100; CHECK-NEXT: subl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x2b,0x3e] 101; CHECK-NEXT: retq # encoding: [0xc3] 102; 103; NF-LABEL: sub32rm: 104; NF: # %bb.0: # %entry 105; NF-NEXT: {nf} subl (%rsi), %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x2b,0x3e] 106; NF-NEXT: retq # encoding: [0xc3] 107entry: 108 %b = load i32, ptr %ptr 109 %sub = sub i32 %a, %b 110 ret i32 %sub 111} 112 113define i64 @sub64rm(i64 noundef %a, ptr %ptr) { 114; CHECK-LABEL: sub64rm: 115; CHECK: # %bb.0: # %entry 116; CHECK-NEXT: subq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x2b,0x3e] 117; CHECK-NEXT: retq # encoding: [0xc3] 118; 119; NF-LABEL: sub64rm: 120; NF: # %bb.0: # %entry 121; NF-NEXT: {nf} subq (%rsi), %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x2b,0x3e] 122; NF-NEXT: retq # encoding: [0xc3] 123entry: 124 %b = load i64, ptr %ptr 125 %sub = sub i64 %a, %b 126 ret i64 %sub 127} 128 129define i16 @sub16ri8(i16 noundef %a) { 130; CHECK-LABEL: sub16ri8: 131; CHECK: # %bb.0: # %entry 132; CHECK-NEXT: subw $-128, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xef,0x80] 133; CHECK-NEXT: retq # encoding: [0xc3] 134; 135; NF-LABEL: sub16ri8: 136; NF: # %bb.0: # %entry 137; NF-NEXT: {nf} subw $-128, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xef,0x80] 138; NF-NEXT: retq # encoding: [0xc3] 139entry: 140 %sub = sub i16 %a, -128 141 ret i16 %sub 142} 143 144define i32 @sub32ri8(i32 noundef %a) { 145; CHECK-LABEL: sub32ri8: 146; CHECK: # %bb.0: # %entry 147; CHECK-NEXT: subl $-128, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xef,0x80] 148; CHECK-NEXT: retq # encoding: [0xc3] 149; 150; NF-LABEL: sub32ri8: 151; NF: # %bb.0: # %entry 152; NF-NEXT: {nf} subl $-128, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0xef,0x80] 153; NF-NEXT: retq # encoding: [0xc3] 154entry: 155 %sub = sub i32 %a, -128 156 ret i32 %sub 157} 158 159define i64 @sub64ri8(i64 noundef %a) { 160; CHECK-LABEL: sub64ri8: 161; CHECK: # %bb.0: # %entry 162; CHECK-NEXT: subq $-128, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xef,0x80] 163; CHECK-NEXT: retq # encoding: [0xc3] 164; 165; NF-LABEL: sub64ri8: 166; NF: # %bb.0: # %entry 167; NF-NEXT: {nf} subq $-128, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0xef,0x80] 168; NF-NEXT: retq # encoding: [0xc3] 169entry: 170 %sub = sub i64 %a, -128 171 ret i64 %sub 172} 173 174define i8 @sub8ri(i8 noundef %a) { 175; CHECK-LABEL: sub8ri: 176; CHECK: # %bb.0: # %entry 177; CHECK-NEXT: addb $-123, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0xc7,0x85] 178; CHECK-NEXT: retq # encoding: [0xc3] 179; 180; NF-LABEL: sub8ri: 181; NF: # %bb.0: # %entry 182; NF-NEXT: {nf} addb $-123, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0xc7,0x85] 183; NF-NEXT: retq # encoding: [0xc3] 184entry: 185 %sub = sub i8 %a, 123 186 ret i8 %sub 187} 188 189define i16 @sub16ri(i16 noundef %a) { 190; CHECK-LABEL: sub16ri: 191; CHECK: # %bb.0: # %entry 192; CHECK-NEXT: addw $-1234, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0xc7,0x2e,0xfb] 193; CHECK-NEXT: # imm = 0xFB2E 194; CHECK-NEXT: retq # encoding: [0xc3] 195; 196; NF-LABEL: sub16ri: 197; NF: # %bb.0: # %entry 198; NF-NEXT: {nf} addw $-1234, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xc7,0x2e,0xfb] 199; NF-NEXT: # imm = 0xFB2E 200; NF-NEXT: retq # encoding: [0xc3] 201entry: 202 %sub = sub i16 %a, 1234 203 ret i16 %sub 204} 205 206define i32 @sub32ri(i32 noundef %a) { 207; CHECK-LABEL: sub32ri: 208; CHECK: # %bb.0: # %entry 209; CHECK-NEXT: addl $-123456, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0xc7,0xc0,0x1d,0xfe,0xff] 210; CHECK-NEXT: # imm = 0xFFFE1DC0 211; CHECK-NEXT: retq # encoding: [0xc3] 212; 213; NF-LABEL: sub32ri: 214; NF: # %bb.0: # %entry 215; NF-NEXT: {nf} addl $-123456, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0xc7,0xc0,0x1d,0xfe,0xff] 216; NF-NEXT: # imm = 0xFFFE1DC0 217; NF-NEXT: retq # encoding: [0xc3] 218entry: 219 %sub = sub i32 %a, 123456 220 ret i32 %sub 221} 222 223define i64 @sub64ri(i64 noundef %a) { 224; CHECK-LABEL: sub64ri: 225; CHECK: # %bb.0: # %entry 226; CHECK-NEXT: subq $-2147483648, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0xef,0x00,0x00,0x00,0x80] 227; CHECK-NEXT: # imm = 0x80000000 228; CHECK-NEXT: retq # encoding: [0xc3] 229; 230; NF-LABEL: sub64ri: 231; NF: # %bb.0: # %entry 232; NF-NEXT: {nf} subq $-2147483648, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0xef,0x00,0x00,0x00,0x80] 233; NF-NEXT: # imm = 0x80000000 234; NF-NEXT: retq # encoding: [0xc3] 235entry: 236 %sub = sub i64 %a, -2147483648 237 ret i64 %sub 238} 239 240define i8 @sub8mr(ptr %a, i8 noundef %b) { 241; CHECK-LABEL: sub8mr: 242; CHECK: # %bb.0: # %entry 243; CHECK-NEXT: subb %sil, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x28,0x37] 244; CHECK-NEXT: retq # encoding: [0xc3] 245; 246; NF-LABEL: sub8mr: 247; NF: # %bb.0: # %entry 248; NF-NEXT: {nf} subb %sil, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x28,0x37] 249; NF-NEXT: retq # encoding: [0xc3] 250entry: 251 %t= load i8, ptr %a 252 %sub = sub nsw i8 %t, %b 253 ret i8 %sub 254} 255 256define i16 @sub16mr(ptr %a, i16 noundef %b) { 257; CHECK-LABEL: sub16mr: 258; CHECK: # %bb.0: # %entry 259; CHECK-NEXT: subw %si, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x29,0x37] 260; CHECK-NEXT: retq # encoding: [0xc3] 261; 262; NF-LABEL: sub16mr: 263; NF: # %bb.0: # %entry 264; NF-NEXT: {nf} subw %si, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x29,0x37] 265; NF-NEXT: retq # encoding: [0xc3] 266entry: 267 %t= load i16, ptr %a 268 %sub = sub nsw i16 %t, %b 269 ret i16 %sub 270} 271 272define i32 @sub32mr(ptr %a, i32 noundef %b) { 273; CHECK-LABEL: sub32mr: 274; CHECK: # %bb.0: # %entry 275; CHECK-NEXT: subl %esi, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x29,0x37] 276; CHECK-NEXT: retq # encoding: [0xc3] 277; 278; NF-LABEL: sub32mr: 279; NF: # %bb.0: # %entry 280; NF-NEXT: {nf} subl %esi, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x29,0x37] 281; NF-NEXT: retq # encoding: [0xc3] 282entry: 283 %t= load i32, ptr %a 284 %sub = sub nsw i32 %t, %b 285 ret i32 %sub 286} 287 288define i64 @sub64mr(ptr %a, i64 noundef %b) { 289; CHECK-LABEL: sub64mr: 290; CHECK: # %bb.0: # %entry 291; CHECK-NEXT: subq %rsi, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x29,0x37] 292; CHECK-NEXT: retq # encoding: [0xc3] 293; 294; NF-LABEL: sub64mr: 295; NF: # %bb.0: # %entry 296; NF-NEXT: {nf} subq %rsi, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x29,0x37] 297; NF-NEXT: retq # encoding: [0xc3] 298entry: 299 %t= load i64, ptr %a 300 %sub = sub nsw i64 %t, %b 301 ret i64 %sub 302} 303 304define i16 @sub16mi8(ptr %a) { 305; CHECK-LABEL: sub16mi8: 306; CHECK: # %bb.0: # %entry 307; CHECK-NEXT: subw $-128, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x2f,0x80] 308; CHECK-NEXT: retq # encoding: [0xc3] 309; 310; NF-LABEL: sub16mi8: 311; NF: # %bb.0: # %entry 312; NF-NEXT: {nf} subw $-128, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0x2f,0x80] 313; NF-NEXT: retq # encoding: [0xc3] 314entry: 315 %t= load i16, ptr %a 316 %sub = sub nsw i16 %t, -128 317 ret i16 %sub 318} 319 320define i32 @sub32mi8(ptr %a) { 321; CHECK-LABEL: sub32mi8: 322; CHECK: # %bb.0: # %entry 323; CHECK-NEXT: subl $-128, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x2f,0x80] 324; CHECK-NEXT: retq # encoding: [0xc3] 325; 326; NF-LABEL: sub32mi8: 327; NF: # %bb.0: # %entry 328; NF-NEXT: {nf} subl $-128, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0x2f,0x80] 329; NF-NEXT: retq # encoding: [0xc3] 330entry: 331 %t= load i32, ptr %a 332 %sub = sub nsw i32 %t, -128 333 ret i32 %sub 334} 335 336define i64 @sub64mi8(ptr %a) { 337; CHECK-LABEL: sub64mi8: 338; CHECK: # %bb.0: # %entry 339; CHECK-NEXT: subq $-128, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x2f,0x80] 340; CHECK-NEXT: retq # encoding: [0xc3] 341; 342; NF-LABEL: sub64mi8: 343; NF: # %bb.0: # %entry 344; NF-NEXT: {nf} subq $-128, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0x2f,0x80] 345; NF-NEXT: retq # encoding: [0xc3] 346entry: 347 %t= load i64, ptr %a 348 %sub = sub nsw i64 %t, -128 349 ret i64 %sub 350} 351 352define i8 @sub8mi(ptr %a) { 353; CHECK-LABEL: sub8mi: 354; CHECK: # %bb.0: # %entry 355; CHECK-NEXT: addb $-123, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0x07,0x85] 356; CHECK-NEXT: retq # encoding: [0xc3] 357; 358; NF-LABEL: sub8mi: 359; NF: # %bb.0: # %entry 360; NF-NEXT: {nf} addb $-123, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0x07,0x85] 361; NF-NEXT: retq # encoding: [0xc3] 362entry: 363 %t= load i8, ptr %a 364 %sub = sub nsw i8 %t, 123 365 ret i8 %sub 366} 367 368define i16 @sub16mi(ptr %a) { 369; CHECK-LABEL: sub16mi: 370; CHECK: # %bb.0: # %entry 371; CHECK-NEXT: addw $-1234, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0x07,0x2e,0xfb] 372; CHECK-NEXT: # imm = 0xFB2E 373; CHECK-NEXT: retq # encoding: [0xc3] 374; 375; NF-LABEL: sub16mi: 376; NF: # %bb.0: # %entry 377; NF-NEXT: {nf} addw $-1234, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0x07,0x2e,0xfb] 378; NF-NEXT: # imm = 0xFB2E 379; NF-NEXT: retq # encoding: [0xc3] 380entry: 381 %t= load i16, ptr %a 382 %sub = sub nsw i16 %t, 1234 383 ret i16 %sub 384} 385 386define i32 @sub32mi(ptr %a) { 387; CHECK-LABEL: sub32mi: 388; CHECK: # %bb.0: # %entry 389; CHECK-NEXT: addl $-123456, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0x07,0xc0,0x1d,0xfe,0xff] 390; CHECK-NEXT: # imm = 0xFFFE1DC0 391; CHECK-NEXT: retq # encoding: [0xc3] 392; 393; NF-LABEL: sub32mi: 394; NF: # %bb.0: # %entry 395; NF-NEXT: {nf} addl $-123456, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0x07,0xc0,0x1d,0xfe,0xff] 396; NF-NEXT: # imm = 0xFFFE1DC0 397; NF-NEXT: retq # encoding: [0xc3] 398entry: 399 %t= load i32, ptr %a 400 %sub = sub nsw i32 %t, 123456 401 ret i32 %sub 402} 403 404define i64 @sub64mi(ptr %a) { 405; CHECK-LABEL: sub64mi: 406; CHECK: # %bb.0: # %entry 407; CHECK-NEXT: subq $-2147483648, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0x2f,0x00,0x00,0x00,0x80] 408; CHECK-NEXT: # imm = 0x80000000 409; CHECK-NEXT: retq # encoding: [0xc3] 410; 411; NF-LABEL: sub64mi: 412; NF: # %bb.0: # %entry 413; NF-NEXT: {nf} subq $-2147483648, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0x2f,0x00,0x00,0x00,0x80] 414; NF-NEXT: # imm = 0x80000000 415; NF-NEXT: retq # encoding: [0xc3] 416entry: 417 %t= load i64, ptr %a 418 %sub = sub nsw i64 %t, -2147483648 419 ret i64 %sub 420} 421 422declare i8 @llvm.usub.sat.i8(i8, i8) 423declare i16 @llvm.usub.sat.i16(i16, i16) 424declare i32 @llvm.usub.sat.i32(i32, i32) 425declare i64 @llvm.usub.sat.i64(i64, i64) 426 427define i8 @subflag8rr(i8 noundef %a, i8 noundef %b) { 428; CHECK-LABEL: subflag8rr: 429; CHECK: # %bb.0: # %entry 430; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 431; CHECK-NEXT: subb %sil, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x28,0xf7] 432; CHECK-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 433; CHECK-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 434; CHECK-NEXT: # kill: def $al killed $al killed $eax 435; CHECK-NEXT: retq # encoding: [0xc3] 436; 437; NF-LABEL: subflag8rr: 438; NF: # %bb.0: # %entry 439; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 440; NF-NEXT: subb %sil, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x28,0xf7] 441; NF-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 442; NF-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 443; NF-NEXT: # kill: def $al killed $al killed $eax 444; NF-NEXT: retq # encoding: [0xc3] 445entry: 446 %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 %b) 447 ret i8 %sub 448} 449 450define i16 @subflag16rr(i16 noundef %a, i16 noundef %b) { 451; CHECK-LABEL: subflag16rr: 452; CHECK: # %bb.0: # %entry 453; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 454; CHECK-NEXT: subw %si, %di # EVEX TO LEGACY Compression encoding: [0x66,0x29,0xf7] 455; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 456; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 457; CHECK-NEXT: retq # encoding: [0xc3] 458; 459; NF-LABEL: subflag16rr: 460; NF: # %bb.0: # %entry 461; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 462; NF-NEXT: subw %si, %di # EVEX TO LEGACY Compression encoding: [0x66,0x29,0xf7] 463; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 464; NF-NEXT: # kill: def $ax killed $ax killed $eax 465; NF-NEXT: retq # encoding: [0xc3] 466entry: 467 %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 %b) 468 ret i16 %sub 469} 470 471define i32 @subflag32rr(i32 noundef %a, i32 noundef %b) { 472; CHECK-LABEL: subflag32rr: 473; CHECK: # %bb.0: # %entry 474; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 475; CHECK-NEXT: subl %esi, %edi # EVEX TO LEGACY Compression encoding: [0x29,0xf7] 476; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 477; CHECK-NEXT: retq # encoding: [0xc3] 478; 479; NF-LABEL: subflag32rr: 480; NF: # %bb.0: # %entry 481; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 482; NF-NEXT: subl %esi, %edi # EVEX TO LEGACY Compression encoding: [0x29,0xf7] 483; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 484; NF-NEXT: retq # encoding: [0xc3] 485entry: 486 %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 %b) 487 ret i32 %sub 488} 489 490define i64 @subflag64rr(i64 noundef %a, i64 noundef %b) { 491; CHECK-LABEL: subflag64rr: 492; CHECK: # %bb.0: # %entry 493; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 494; CHECK-NEXT: subq %rsi, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x29,0xf7] 495; CHECK-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 496; CHECK-NEXT: retq # encoding: [0xc3] 497; 498; NF-LABEL: subflag64rr: 499; NF: # %bb.0: # %entry 500; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 501; NF-NEXT: subq %rsi, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x29,0xf7] 502; NF-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 503; NF-NEXT: retq # encoding: [0xc3] 504entry: 505 %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b) 506 ret i64 %sub 507} 508 509define i8 @subflag8rm(i8 noundef %a, ptr %b) { 510; CHECK-LABEL: subflag8rm: 511; CHECK: # %bb.0: # %entry 512; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 513; CHECK-NEXT: subb (%rsi), %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x2a,0x3e] 514; CHECK-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 515; CHECK-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 516; CHECK-NEXT: # kill: def $al killed $al killed $eax 517; CHECK-NEXT: retq # encoding: [0xc3] 518; 519; NF-LABEL: subflag8rm: 520; NF: # %bb.0: # %entry 521; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 522; NF-NEXT: subb (%rsi), %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x2a,0x3e] 523; NF-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 524; NF-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 525; NF-NEXT: # kill: def $al killed $al killed $eax 526; NF-NEXT: retq # encoding: [0xc3] 527entry: 528 %t = load i8, ptr %b 529 %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 %t) 530 ret i8 %sub 531} 532 533define i16 @subflag16rm(i16 noundef %a, ptr %b) { 534; CHECK-LABEL: subflag16rm: 535; CHECK: # %bb.0: # %entry 536; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 537; CHECK-NEXT: subw (%rsi), %di # EVEX TO LEGACY Compression encoding: [0x66,0x2b,0x3e] 538; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 539; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 540; CHECK-NEXT: retq # encoding: [0xc3] 541; 542; NF-LABEL: subflag16rm: 543; NF: # %bb.0: # %entry 544; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 545; NF-NEXT: subw (%rsi), %di # EVEX TO LEGACY Compression encoding: [0x66,0x2b,0x3e] 546; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 547; NF-NEXT: # kill: def $ax killed $ax killed $eax 548; NF-NEXT: retq # encoding: [0xc3] 549entry: 550 %t = load i16, ptr %b 551 %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 %t) 552 ret i16 %sub 553} 554 555define i32 @subflag32rm(i32 noundef %a, ptr %b) { 556; CHECK-LABEL: subflag32rm: 557; CHECK: # %bb.0: # %entry 558; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 559; CHECK-NEXT: subl (%rsi), %edi # EVEX TO LEGACY Compression encoding: [0x2b,0x3e] 560; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 561; CHECK-NEXT: retq # encoding: [0xc3] 562; 563; NF-LABEL: subflag32rm: 564; NF: # %bb.0: # %entry 565; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 566; NF-NEXT: subl (%rsi), %edi # EVEX TO LEGACY Compression encoding: [0x2b,0x3e] 567; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 568; NF-NEXT: retq # encoding: [0xc3] 569entry: 570 %t = load i32, ptr %b 571 %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 %t) 572 ret i32 %sub 573} 574 575define i64 @subflag64rm(i64 noundef %a, ptr %b) { 576; CHECK-LABEL: subflag64rm: 577; CHECK: # %bb.0: # %entry 578; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 579; CHECK-NEXT: subq (%rsi), %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x2b,0x3e] 580; CHECK-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 581; CHECK-NEXT: retq # encoding: [0xc3] 582; 583; NF-LABEL: subflag64rm: 584; NF: # %bb.0: # %entry 585; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 586; NF-NEXT: subq (%rsi), %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x2b,0x3e] 587; NF-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 588; NF-NEXT: retq # encoding: [0xc3] 589entry: 590 %t = load i64, ptr %b 591 %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 %t) 592 ret i64 %sub 593} 594 595define i16 @subflag16ri8(i16 noundef %a) { 596; CHECK-LABEL: subflag16ri8: 597; CHECK: # %bb.0: # %entry 598; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 599; CHECK-NEXT: subw $123, %di # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xef,0x7b] 600; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 601; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 602; CHECK-NEXT: retq # encoding: [0xc3] 603; 604; NF-LABEL: subflag16ri8: 605; NF: # %bb.0: # %entry 606; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 607; NF-NEXT: subw $123, %di # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xef,0x7b] 608; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 609; NF-NEXT: # kill: def $ax killed $ax killed $eax 610; NF-NEXT: retq # encoding: [0xc3] 611entry: 612 %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 123) 613 ret i16 %sub 614} 615 616define i32 @subflag32ri8(i32 noundef %a) { 617; CHECK-LABEL: subflag32ri8: 618; CHECK: # %bb.0: # %entry 619; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 620; CHECK-NEXT: subl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xef,0x7b] 621; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 622; CHECK-NEXT: retq # encoding: [0xc3] 623; 624; NF-LABEL: subflag32ri8: 625; NF: # %bb.0: # %entry 626; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 627; NF-NEXT: subl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xef,0x7b] 628; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 629; NF-NEXT: retq # encoding: [0xc3] 630entry: 631 %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 123) 632 ret i32 %sub 633} 634 635define i64 @subflag64ri8(i64 noundef %a) { 636; CHECK-LABEL: subflag64ri8: 637; CHECK: # %bb.0: # %entry 638; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 639; CHECK-NEXT: subq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xef,0x7b] 640; CHECK-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 641; CHECK-NEXT: retq # encoding: [0xc3] 642; 643; NF-LABEL: subflag64ri8: 644; NF: # %bb.0: # %entry 645; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 646; NF-NEXT: subq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xef,0x7b] 647; NF-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 648; NF-NEXT: retq # encoding: [0xc3] 649entry: 650 %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 123) 651 ret i64 %sub 652} 653 654define i8 @subflag8ri(i8 noundef %a) { 655; CHECK-LABEL: subflag8ri: 656; CHECK: # %bb.0: # %entry 657; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 658; CHECK-NEXT: subb $123, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xef,0x7b] 659; CHECK-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 660; CHECK-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 661; CHECK-NEXT: # kill: def $al killed $al killed $eax 662; CHECK-NEXT: retq # encoding: [0xc3] 663; 664; NF-LABEL: subflag8ri: 665; NF: # %bb.0: # %entry 666; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 667; NF-NEXT: subb $123, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xef,0x7b] 668; NF-NEXT: movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9] 669; NF-NEXT: cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1] 670; NF-NEXT: # kill: def $al killed $al killed $eax 671; NF-NEXT: retq # encoding: [0xc3] 672entry: 673 %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 123) 674 ret i8 %sub 675} 676 677define i16 @subflag16ri(i16 noundef %a) { 678; CHECK-LABEL: subflag16ri: 679; CHECK: # %bb.0: # %entry 680; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 681; CHECK-NEXT: subw $1234, %di # EVEX TO LEGACY Compression encoding: [0x66,0x81,0xef,0xd2,0x04] 682; CHECK-NEXT: # imm = 0x4D2 683; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 684; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 685; CHECK-NEXT: retq # encoding: [0xc3] 686; 687; NF-LABEL: subflag16ri: 688; NF: # %bb.0: # %entry 689; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 690; NF-NEXT: subw $1234, %di # EVEX TO LEGACY Compression encoding: [0x66,0x81,0xef,0xd2,0x04] 691; NF-NEXT: # imm = 0x4D2 692; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 693; NF-NEXT: # kill: def $ax killed $ax killed $eax 694; NF-NEXT: retq # encoding: [0xc3] 695entry: 696 %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 1234) 697 ret i16 %sub 698} 699 700define i32 @subflag32ri(i32 noundef %a) { 701; CHECK-LABEL: subflag32ri: 702; CHECK: # %bb.0: # %entry 703; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 704; CHECK-NEXT: subl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xef,0x40,0xe2,0x01,0x00] 705; CHECK-NEXT: # imm = 0x1E240 706; CHECK-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 707; CHECK-NEXT: retq # encoding: [0xc3] 708; 709; NF-LABEL: subflag32ri: 710; NF: # %bb.0: # %entry 711; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 712; NF-NEXT: subl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xef,0x40,0xe2,0x01,0x00] 713; NF-NEXT: # imm = 0x1E240 714; NF-NEXT: cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7] 715; NF-NEXT: retq # encoding: [0xc3] 716entry: 717 %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 123456) 718 ret i32 %sub 719} 720 721define i64 @subflag64ri(i64 noundef %a) { 722; CHECK-LABEL: subflag64ri: 723; CHECK: # %bb.0: # %entry 724; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 725; CHECK-NEXT: subq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xef,0x40,0xe2,0x01,0x00] 726; CHECK-NEXT: # imm = 0x1E240 727; CHECK-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 728; CHECK-NEXT: retq # encoding: [0xc3] 729; 730; NF-LABEL: subflag64ri: 731; NF: # %bb.0: # %entry 732; NF-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 733; NF-NEXT: subq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xef,0x40,0xe2,0x01,0x00] 734; NF-NEXT: # imm = 0x1E240 735; NF-NEXT: cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7] 736; NF-NEXT: retq # encoding: [0xc3] 737entry: 738 %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 123456) 739 ret i64 %sub 740} 741 742@val = external hidden global i8 743 744declare void @f() 745 746define void @sub64ri_reloc(i64 %val) { 747; CHECK-LABEL: sub64ri_reloc: 748; CHECK: # %bb.0: 749; CHECK-NEXT: cmpq $val, %rdi # encoding: [0x48,0x81,0xff,A,A,A,A] 750; CHECK-NEXT: # fixup A - offset: 3, value: val, kind: reloc_signed_4byte 751; CHECK-NEXT: jbe .LBB41_2 # encoding: [0x76,A] 752; CHECK-NEXT: # fixup A - offset: 1, value: .LBB41_2-1, kind: FK_PCRel_1 753; CHECK-NEXT: # %bb.1: # %t 754; CHECK-NEXT: pushq %rax # encoding: [0x50] 755; CHECK-NEXT: .cfi_def_cfa_offset 16 756; CHECK-NEXT: callq f@PLT # encoding: [0xe8,A,A,A,A] 757; CHECK-NEXT: # fixup A - offset: 1, value: f@PLT-4, kind: FK_PCRel_4 758; CHECK-NEXT: popq %rax # encoding: [0x58] 759; CHECK-NEXT: .cfi_def_cfa_offset 8 760; CHECK-NEXT: .LBB41_2: # %f 761; CHECK-NEXT: retq # encoding: [0xc3] 762; 763; NF-LABEL: sub64ri_reloc: 764; NF: # %bb.0: 765; NF-NEXT: cmpq $val, %rdi # encoding: [0x48,0x81,0xff,A,A,A,A] 766; NF-NEXT: # fixup A - offset: 3, value: val, kind: reloc_signed_4byte 767; NF-NEXT: jbe .LBB41_2 # encoding: [0x76,A] 768; NF-NEXT: # fixup A - offset: 1, value: .LBB41_2-1, kind: FK_PCRel_1 769; NF-NEXT: # %bb.1: # %t 770; NF-NEXT: pushq %rax # encoding: [0x50] 771; NF-NEXT: .cfi_def_cfa_offset 16 772; NF-NEXT: callq f@PLT # encoding: [0xe8,A,A,A,A] 773; NF-NEXT: # fixup A - offset: 1, value: f@PLT-4, kind: FK_PCRel_4 774; NF-NEXT: popq %rax # encoding: [0x58] 775; NF-NEXT: .cfi_def_cfa_offset 8 776; NF-NEXT: .LBB41_2: # %f 777; NF-NEXT: retq # encoding: [0xc3] 778 %cmp = icmp ugt i64 %val, ptrtoint (ptr @val to i64) 779 br i1 %cmp, label %t, label %f 780 781t: 782 call void @f() 783 ret void 784 785f: 786 ret void 787} 788 789define void @sub8mr_legacy(ptr %a, i8 noundef %b) { 790; CHECK-LABEL: sub8mr_legacy: 791; CHECK: # %bb.0: # %entry 792; CHECK-NEXT: subb %sil, (%rdi) # encoding: [0x40,0x28,0x37] 793; CHECK-NEXT: retq # encoding: [0xc3] 794; 795; NF-LABEL: sub8mr_legacy: 796; NF: # %bb.0: # %entry 797; NF-NEXT: subb %sil, (%rdi) # encoding: [0x40,0x28,0x37] 798; NF-NEXT: retq # encoding: [0xc3] 799entry: 800 %t= load i8, ptr %a 801 %sub = sub i8 %t, %b 802 store i8 %sub, ptr %a 803 ret void 804} 805 806define void @sub16mr_legacy(ptr %a, i16 noundef %b) { 807; CHECK-LABEL: sub16mr_legacy: 808; CHECK: # %bb.0: # %entry 809; CHECK-NEXT: subw %si, (%rdi) # encoding: [0x66,0x29,0x37] 810; CHECK-NEXT: retq # encoding: [0xc3] 811; 812; NF-LABEL: sub16mr_legacy: 813; NF: # %bb.0: # %entry 814; NF-NEXT: subw %si, (%rdi) # encoding: [0x66,0x29,0x37] 815; NF-NEXT: retq # encoding: [0xc3] 816entry: 817 %t= load i16, ptr %a 818 %sub = sub i16 %t, %b 819 store i16 %sub, ptr %a 820 ret void 821} 822 823define void @sub32mr_legacy(ptr %a, i32 noundef %b) { 824; CHECK-LABEL: sub32mr_legacy: 825; CHECK: # %bb.0: # %entry 826; CHECK-NEXT: subl %esi, (%rdi) # encoding: [0x29,0x37] 827; CHECK-NEXT: retq # encoding: [0xc3] 828; 829; NF-LABEL: sub32mr_legacy: 830; NF: # %bb.0: # %entry 831; NF-NEXT: subl %esi, (%rdi) # encoding: [0x29,0x37] 832; NF-NEXT: retq # encoding: [0xc3] 833entry: 834 %t= load i32, ptr %a 835 %sub = sub i32 %t, %b 836 store i32 %sub, ptr %a 837 ret void 838} 839 840define void @sub64mr_legacy(ptr %a, i64 noundef %b) { 841; CHECK-LABEL: sub64mr_legacy: 842; CHECK: # %bb.0: # %entry 843; CHECK-NEXT: subq %rsi, (%rdi) # encoding: [0x48,0x29,0x37] 844; CHECK-NEXT: retq # encoding: [0xc3] 845; 846; NF-LABEL: sub64mr_legacy: 847; NF: # %bb.0: # %entry 848; NF-NEXT: subq %rsi, (%rdi) # encoding: [0x48,0x29,0x37] 849; NF-NEXT: retq # encoding: [0xc3] 850entry: 851 %t= load i64, ptr %a 852 %sub = sub i64 %t, %b 853 store i64 %sub, ptr %a 854 ret void 855} 856 857define void @sub8mi_legacy(ptr %a) { 858; CHECK-LABEL: sub8mi_legacy: 859; CHECK: # %bb.0: # %entry 860; CHECK-NEXT: addb $-123, (%rdi) # encoding: [0x80,0x07,0x85] 861; CHECK-NEXT: retq # encoding: [0xc3] 862; 863; NF-LABEL: sub8mi_legacy: 864; NF: # %bb.0: # %entry 865; NF-NEXT: addb $-123, (%rdi) # encoding: [0x80,0x07,0x85] 866; NF-NEXT: retq # encoding: [0xc3] 867entry: 868 %t= load i8, ptr %a 869 %sub = sub nsw i8 %t, 123 870 store i8 %sub, ptr %a 871 ret void 872} 873 874define void @sub16mi_legacy(ptr %a) { 875; CHECK-LABEL: sub16mi_legacy: 876; CHECK: # %bb.0: # %entry 877; CHECK-NEXT: addw $-1234, (%rdi) # encoding: [0x66,0x81,0x07,0x2e,0xfb] 878; CHECK-NEXT: # imm = 0xFB2E 879; CHECK-NEXT: retq # encoding: [0xc3] 880; 881; NF-LABEL: sub16mi_legacy: 882; NF: # %bb.0: # %entry 883; NF-NEXT: addw $-1234, (%rdi) # encoding: [0x66,0x81,0x07,0x2e,0xfb] 884; NF-NEXT: # imm = 0xFB2E 885; NF-NEXT: retq # encoding: [0xc3] 886entry: 887 %t= load i16, ptr %a 888 %sub = sub nsw i16 %t, 1234 889 store i16 %sub, ptr %a 890 ret void 891} 892 893define void @sub32mi_legacy(ptr %a) { 894; CHECK-LABEL: sub32mi_legacy: 895; CHECK: # %bb.0: # %entry 896; CHECK-NEXT: addl $-123456, (%rdi) # encoding: [0x81,0x07,0xc0,0x1d,0xfe,0xff] 897; CHECK-NEXT: # imm = 0xFFFE1DC0 898; CHECK-NEXT: retq # encoding: [0xc3] 899; 900; NF-LABEL: sub32mi_legacy: 901; NF: # %bb.0: # %entry 902; NF-NEXT: addl $-123456, (%rdi) # encoding: [0x81,0x07,0xc0,0x1d,0xfe,0xff] 903; NF-NEXT: # imm = 0xFFFE1DC0 904; NF-NEXT: retq # encoding: [0xc3] 905entry: 906 %t= load i32, ptr %a 907 %sub = sub nsw i32 %t, 123456 908 store i32 %sub, ptr %a 909 ret void 910} 911 912define void @sub64mi_legacy(ptr %a) { 913; CHECK-LABEL: sub64mi_legacy: 914; CHECK: # %bb.0: # %entry 915; CHECK-NEXT: addq $-123456, (%rdi) # encoding: [0x48,0x81,0x07,0xc0,0x1d,0xfe,0xff] 916; CHECK-NEXT: # imm = 0xFFFE1DC0 917; CHECK-NEXT: retq # encoding: [0xc3] 918; 919; NF-LABEL: sub64mi_legacy: 920; NF: # %bb.0: # %entry 921; NF-NEXT: addq $-123456, (%rdi) # encoding: [0x48,0x81,0x07,0xc0,0x1d,0xfe,0xff] 922; NF-NEXT: # imm = 0xFFFE1DC0 923; NF-NEXT: retq # encoding: [0xc3] 924entry: 925 %t= load i64, ptr %a 926 %sub = sub nsw i64 %t, 123456 927 store i64 %sub, ptr %a 928 ret void 929} 930