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