851 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; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s4; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -x86-enable-apx-for-relocation=true -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s5 6define i8 @xor8rr(i8 noundef %a, i8 noundef %b) {7; CHECK-LABEL: xor8rr:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: xorl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x31,0xf7]10; CHECK-NEXT: # kill: def $al killed $al killed $eax11; CHECK-NEXT: retq # encoding: [0xc3]12;13; NF-LABEL: xor8rr:14; NF: # %bb.0: # %entry15; NF-NEXT: {nf} xorl %esi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x31,0xf7]16; NF-NEXT: # kill: def $al killed $al killed $eax17; NF-NEXT: retq # encoding: [0xc3]18entry:19 %xor = xor i8 %a, %b20 ret i8 %xor21}22 23define i16 @xor16rr(i16 noundef %a, i16 noundef %b) {24; CHECK-LABEL: xor16rr:25; CHECK: # %bb.0: # %entry26; CHECK-NEXT: xorl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x31,0xf7]27; CHECK-NEXT: # kill: def $ax killed $ax killed $eax28; CHECK-NEXT: retq # encoding: [0xc3]29;30; NF-LABEL: xor16rr:31; NF: # %bb.0: # %entry32; NF-NEXT: {nf} xorl %esi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x31,0xf7]33; NF-NEXT: # kill: def $ax killed $ax killed $eax34; NF-NEXT: retq # encoding: [0xc3]35entry:36 %xor = xor i16 %a, %b37 ret i16 %xor38}39 40define i32 @xor32rr(i32 noundef %a, i32 noundef %b) {41; CHECK-LABEL: xor32rr:42; CHECK: # %bb.0: # %entry43; CHECK-NEXT: xorl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x31,0xf7]44; CHECK-NEXT: retq # encoding: [0xc3]45;46; NF-LABEL: xor32rr:47; NF: # %bb.0: # %entry48; NF-NEXT: {nf} xorl %esi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x31,0xf7]49; NF-NEXT: retq # encoding: [0xc3]50entry:51 %xor = xor i32 %a, %b52 ret i32 %xor53}54 55define i64 @xor64rr(i64 noundef %a, i64 noundef %b) {56; CHECK-LABEL: xor64rr:57; CHECK: # %bb.0: # %entry58; CHECK-NEXT: xorq %rsi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x31,0xf7]59; CHECK-NEXT: retq # encoding: [0xc3]60;61; NF-LABEL: xor64rr:62; NF: # %bb.0: # %entry63; NF-NEXT: {nf} xorq %rsi, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x31,0xf7]64; NF-NEXT: retq # encoding: [0xc3]65entry:66 %xor = xor i64 %a, %b67 ret i64 %xor68}69 70define i8 @xor8rm(i8 noundef %a, ptr %b) {71; CHECK-LABEL: xor8rm:72; CHECK: # %bb.0: # %entry73; CHECK-NEXT: xorb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x32,0x3e]74; CHECK-NEXT: retq # encoding: [0xc3]75;76; NF-LABEL: xor8rm:77; NF: # %bb.0: # %entry78; NF-NEXT: {nf} xorb (%rsi), %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x32,0x3e]79; NF-NEXT: retq # encoding: [0xc3]80entry:81 %t = load i8, ptr %b82 %xor = xor i8 %a, %t83 ret i8 %xor84}85 86define i16 @xor16rm(i16 noundef %a, ptr %b) {87; CHECK-LABEL: xor16rm:88; CHECK: # %bb.0: # %entry89; CHECK-NEXT: xorw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x33,0x3e]90; CHECK-NEXT: retq # encoding: [0xc3]91;92; NF-LABEL: xor16rm:93; NF: # %bb.0: # %entry94; NF-NEXT: {nf} xorw (%rsi), %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x33,0x3e]95; NF-NEXT: retq # encoding: [0xc3]96entry:97 %t = load i16, ptr %b98 %xor = xor i16 %a, %t99 ret i16 %xor100}101 102define i32 @xor32rm(i32 noundef %a, ptr %b) {103; CHECK-LABEL: xor32rm:104; CHECK: # %bb.0: # %entry105; CHECK-NEXT: xorl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x33,0x3e]106; CHECK-NEXT: retq # encoding: [0xc3]107;108; NF-LABEL: xor32rm:109; NF: # %bb.0: # %entry110; NF-NEXT: {nf} xorl (%rsi), %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x33,0x3e]111; NF-NEXT: retq # encoding: [0xc3]112entry:113 %t = load i32, ptr %b114 %xor = xor i32 %a, %t115 ret i32 %xor116}117 118define i64 @xor64rm(i64 noundef %a, ptr %b) {119; CHECK-LABEL: xor64rm:120; CHECK: # %bb.0: # %entry121; CHECK-NEXT: xorq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x33,0x3e]122; CHECK-NEXT: retq # encoding: [0xc3]123;124; NF-LABEL: xor64rm:125; NF: # %bb.0: # %entry126; NF-NEXT: {nf} xorq (%rsi), %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x33,0x3e]127; NF-NEXT: retq # encoding: [0xc3]128entry:129 %t = load i64, ptr %b130 %xor = xor i64 %a, %t131 ret i64 %xor132}133 134define i16 @xor16ri8(i16 noundef %a) {135; CHECK-LABEL: xor16ri8:136; CHECK: # %bb.0: # %entry137; CHECK-NEXT: xorw $123, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xf7,0x7b]138; CHECK-NEXT: retq # encoding: [0xc3]139;140; NF-LABEL: xor16ri8:141; NF: # %bb.0: # %entry142; NF-NEXT: {nf} xorw $123, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xf7,0x7b]143; NF-NEXT: retq # encoding: [0xc3]144entry:145 %xor = xor i16 %a, 123146 ret i16 %xor147}148 149define i32 @xor32ri8(i32 noundef %a) {150; CHECK-LABEL: xor32ri8:151; CHECK: # %bb.0: # %entry152; CHECK-NEXT: xorl $123, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xf7,0x7b]153; CHECK-NEXT: retq # encoding: [0xc3]154;155; NF-LABEL: xor32ri8:156; NF: # %bb.0: # %entry157; NF-NEXT: {nf} xorl $123, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0xf7,0x7b]158; NF-NEXT: retq # encoding: [0xc3]159entry:160 %xor = xor i32 %a, 123161 ret i32 %xor162}163 164define i64 @xor64ri8(i64 noundef %a) {165; CHECK-LABEL: xor64ri8:166; CHECK: # %bb.0: # %entry167; CHECK-NEXT: xorq $123, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xf7,0x7b]168; CHECK-NEXT: retq # encoding: [0xc3]169;170; NF-LABEL: xor64ri8:171; NF: # %bb.0: # %entry172; NF-NEXT: {nf} xorq $123, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0xf7,0x7b]173; NF-NEXT: retq # encoding: [0xc3]174entry:175 %xor = xor i64 %a, 123176 ret i64 %xor177}178 179define i8 @xor8ri(i8 noundef %a) {180; CHECK-LABEL: xor8ri:181; CHECK: # %bb.0: # %entry182; CHECK-NEXT: xorb $123, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0xf7,0x7b]183; CHECK-NEXT: retq # encoding: [0xc3]184;185; NF-LABEL: xor8ri:186; NF: # %bb.0: # %entry187; NF-NEXT: {nf} xorb $123, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0xf7,0x7b]188; NF-NEXT: retq # encoding: [0xc3]189entry:190 %xor = xor i8 %a, 123191 ret i8 %xor192}193 194define i16 @xor16ri(i16 noundef %a) {195; CHECK-LABEL: xor16ri:196; CHECK: # %bb.0: # %entry197; CHECK-NEXT: xorw $1234, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0xf7,0xd2,0x04]198; CHECK-NEXT: # imm = 0x4D2199; CHECK-NEXT: retq # encoding: [0xc3]200;201; NF-LABEL: xor16ri:202; NF: # %bb.0: # %entry203; NF-NEXT: {nf} xorw $1234, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xf7,0xd2,0x04]204; NF-NEXT: # imm = 0x4D2205; NF-NEXT: retq # encoding: [0xc3]206entry:207 %xor = xor i16 %a, 1234208 ret i16 %xor209}210 211define i32 @xor32ri(i32 noundef %a) {212; CHECK-LABEL: xor32ri:213; CHECK: # %bb.0: # %entry214; CHECK-NEXT: xorl $123456, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0xf7,0x40,0xe2,0x01,0x00]215; CHECK-NEXT: # imm = 0x1E240216; CHECK-NEXT: retq # encoding: [0xc3]217;218; NF-LABEL: xor32ri:219; NF: # %bb.0: # %entry220; NF-NEXT: {nf} xorl $123456, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0xf7,0x40,0xe2,0x01,0x00]221; NF-NEXT: # imm = 0x1E240222; NF-NEXT: retq # encoding: [0xc3]223entry:224 %xor = xor i32 %a, 123456225 ret i32 %xor226}227 228define i64 @xor64ri(i64 noundef %a) {229; CHECK-LABEL: xor64ri:230; CHECK: # %bb.0: # %entry231; CHECK-NEXT: xorq $123456, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0xf7,0x40,0xe2,0x01,0x00]232; CHECK-NEXT: # imm = 0x1E240233; CHECK-NEXT: retq # encoding: [0xc3]234;235; NF-LABEL: xor64ri:236; NF: # %bb.0: # %entry237; NF-NEXT: {nf} xorq $123456, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0xf7,0x40,0xe2,0x01,0x00]238; NF-NEXT: # imm = 0x1E240239; NF-NEXT: retq # encoding: [0xc3]240entry:241 %xor = xor i64 %a, 123456242 ret i64 %xor243}244 245define i8 @xor8mr(ptr %a, i8 noundef %b) {246; CHECK-LABEL: xor8mr:247; CHECK: # %bb.0: # %entry248; CHECK-NEXT: xorb (%rdi), %sil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x32,0x37]249; CHECK-NEXT: retq # encoding: [0xc3]250;251; NF-LABEL: xor8mr:252; NF: # %bb.0: # %entry253; NF-NEXT: {nf} xorb (%rdi), %sil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x32,0x37]254; NF-NEXT: retq # encoding: [0xc3]255entry:256 %t= load i8, ptr %a257 %xor = xor i8 %t, %b258 ret i8 %xor259}260 261define i16 @xor16mr(ptr %a, i16 noundef %b) {262; CHECK-LABEL: xor16mr:263; CHECK: # %bb.0: # %entry264; CHECK-NEXT: xorw (%rdi), %si, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x33,0x37]265; CHECK-NEXT: retq # encoding: [0xc3]266;267; NF-LABEL: xor16mr:268; NF: # %bb.0: # %entry269; NF-NEXT: {nf} xorw (%rdi), %si, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x33,0x37]270; NF-NEXT: retq # encoding: [0xc3]271entry:272 %t= load i16, ptr %a273 %xor = xor i16 %t, %b274 ret i16 %xor275}276 277define i32 @xor32mr(ptr %a, i32 noundef %b) {278; CHECK-LABEL: xor32mr:279; CHECK: # %bb.0: # %entry280; CHECK-NEXT: xorl (%rdi), %esi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x33,0x37]281; CHECK-NEXT: retq # encoding: [0xc3]282;283; NF-LABEL: xor32mr:284; NF: # %bb.0: # %entry285; NF-NEXT: {nf} xorl (%rdi), %esi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x33,0x37]286; NF-NEXT: retq # encoding: [0xc3]287entry:288 %t= load i32, ptr %a289 %xor = xor i32 %t, %b290 ret i32 %xor291}292 293define i64 @xor64mr(ptr %a, i64 noundef %b) {294; CHECK-LABEL: xor64mr:295; CHECK: # %bb.0: # %entry296; CHECK-NEXT: xorq (%rdi), %rsi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x33,0x37]297; CHECK-NEXT: retq # encoding: [0xc3]298;299; NF-LABEL: xor64mr:300; NF: # %bb.0: # %entry301; NF-NEXT: {nf} xorq (%rdi), %rsi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x33,0x37]302; NF-NEXT: retq # encoding: [0xc3]303entry:304 %t= load i64, ptr %a305 %xor = xor i64 %t, %b306 ret i64 %xor307}308 309define i16 @xor16mi8(ptr %a) {310; CHECK-LABEL: xor16mi8:311; CHECK: # %bb.0: # %entry312; CHECK-NEXT: xorw $123, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x37,0x7b]313; CHECK-NEXT: retq # encoding: [0xc3]314;315; NF-LABEL: xor16mi8:316; NF: # %bb.0: # %entry317; NF-NEXT: {nf} xorw $123, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0x37,0x7b]318; NF-NEXT: retq # encoding: [0xc3]319entry:320 %t= load i16, ptr %a321 %xor = xor i16 %t, 123322 ret i16 %xor323}324 325define i32 @xor32mi8(ptr %a) {326; CHECK-LABEL: xor32mi8:327; CHECK: # %bb.0: # %entry328; CHECK-NEXT: xorl $123, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x37,0x7b]329; CHECK-NEXT: retq # encoding: [0xc3]330;331; NF-LABEL: xor32mi8:332; NF: # %bb.0: # %entry333; NF-NEXT: {nf} xorl $123, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0x37,0x7b]334; NF-NEXT: retq # encoding: [0xc3]335entry:336 %t= load i32, ptr %a337 %xor = xor i32 %t, 123338 ret i32 %xor339}340 341define i64 @xor64mi8(ptr %a) {342; CHECK-LABEL: xor64mi8:343; CHECK: # %bb.0: # %entry344; CHECK-NEXT: xorq $123, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x37,0x7b]345; CHECK-NEXT: retq # encoding: [0xc3]346;347; NF-LABEL: xor64mi8:348; NF: # %bb.0: # %entry349; NF-NEXT: {nf} xorq $123, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0x37,0x7b]350; NF-NEXT: retq # encoding: [0xc3]351entry:352 %t= load i64, ptr %a353 %xor = xor i64 %t, 123354 ret i64 %xor355}356 357define i8 @xor8mi(ptr %a) {358; CHECK-LABEL: xor8mi:359; CHECK: # %bb.0: # %entry360; CHECK-NEXT: xorb $123, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0x37,0x7b]361; CHECK-NEXT: retq # encoding: [0xc3]362;363; NF-LABEL: xor8mi:364; NF: # %bb.0: # %entry365; NF-NEXT: {nf} xorb $123, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0x37,0x7b]366; NF-NEXT: retq # encoding: [0xc3]367entry:368 %t= load i8, ptr %a369 %xor = xor i8 %t, 123370 ret i8 %xor371}372 373define i16 @xor16mi(ptr %a) {374; CHECK-LABEL: xor16mi:375; CHECK: # %bb.0: # %entry376; CHECK-NEXT: xorw $1234, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0x37,0xd2,0x04]377; CHECK-NEXT: # imm = 0x4D2378; CHECK-NEXT: retq # encoding: [0xc3]379;380; NF-LABEL: xor16mi:381; NF: # %bb.0: # %entry382; NF-NEXT: {nf} xorw $1234, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0x37,0xd2,0x04]383; NF-NEXT: # imm = 0x4D2384; NF-NEXT: retq # encoding: [0xc3]385entry:386 %t= load i16, ptr %a387 %xor = xor i16 %t, 1234388 ret i16 %xor389}390 391define i32 @xor32mi(ptr %a) {392; CHECK-LABEL: xor32mi:393; CHECK: # %bb.0: # %entry394; CHECK-NEXT: xorl $123456, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0x37,0x40,0xe2,0x01,0x00]395; CHECK-NEXT: # imm = 0x1E240396; CHECK-NEXT: retq # encoding: [0xc3]397;398; NF-LABEL: xor32mi:399; NF: # %bb.0: # %entry400; NF-NEXT: {nf} xorl $123456, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0x37,0x40,0xe2,0x01,0x00]401; NF-NEXT: # imm = 0x1E240402; NF-NEXT: retq # encoding: [0xc3]403entry:404 %t= load i32, ptr %a405 %xor = xor i32 %t, 123456406 ret i32 %xor407}408 409define i64 @xor64mi(ptr %a) {410; CHECK-LABEL: xor64mi:411; CHECK: # %bb.0: # %entry412; CHECK-NEXT: xorq $123456, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0x37,0x40,0xe2,0x01,0x00]413; CHECK-NEXT: # imm = 0x1E240414; CHECK-NEXT: retq # encoding: [0xc3]415;416; NF-LABEL: xor64mi:417; NF: # %bb.0: # %entry418; NF-NEXT: {nf} xorq $123456, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0x37,0x40,0xe2,0x01,0x00]419; NF-NEXT: # imm = 0x1E240420; NF-NEXT: retq # encoding: [0xc3]421entry:422 %t= load i64, ptr %a423 %xor = xor i64 %t, 123456424 ret i64 %xor425}426 427@d64 = dso_local global i64 0428 429define i1 @xorflag8rr(i8 %a, i8 %b) {430; CHECK-LABEL: xorflag8rr:431; CHECK: # %bb.0:432; CHECK-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]433; CHECK-NEXT: xorb $-1, %sil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf6,0xff]434; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]435; CHECK-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]436; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte437; CHECK-NEXT: retq # encoding: [0xc3]438;439; NF-LABEL: xorflag8rr:440; NF: # %bb.0:441; NF-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]442; NF-NEXT: xorb $-1, %sil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf6,0xff]443; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]444; NF-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]445; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte446; NF-NEXT: retq # encoding: [0xc3]447 %xor = xor i8 %b, -1448 %v0 = xor i8 %a, %xor ; 0xff << 50449 %v1 = icmp eq i8 %v0, 0450 store i8 %v0, ptr @d64451 ret i1 %v1452}453 454define i1 @xorflag16rr(i16 %a, i16 %b) {455; CHECK-LABEL: xorflag16rr:456; CHECK: # %bb.0:457; CHECK-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]458; CHECK-NEXT: xorw $-1, %si, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf6,0xff]459; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]460; CHECK-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]461; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte462; CHECK-NEXT: retq # encoding: [0xc3]463;464; NF-LABEL: xorflag16rr:465; NF: # %bb.0:466; NF-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]467; NF-NEXT: xorw $-1, %si, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf6,0xff]468; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]469; NF-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]470; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte471; NF-NEXT: retq # encoding: [0xc3]472 %xor = xor i16 %b, -1473 %v0 = xor i16 %a, %xor ; 0xff << 50474 %v1 = icmp eq i16 %v0, 0475 store i16 %v0, ptr @d64476 ret i1 %v1477}478 479define i1 @xorflag32rr(i32 %a, i32 %b) {480; CHECK-LABEL: xorflag32rr:481; CHECK: # %bb.0:482; CHECK-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]483; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]484; CHECK-NEXT: movl %esi, d64(%rip) # encoding: [0x89,0x35,A,A,A,A]485; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte486; CHECK-NEXT: retq # encoding: [0xc3]487;488; NF-LABEL: xorflag32rr:489; NF: # %bb.0:490; NF-NEXT: xorl %edi, %esi # EVEX TO LEGACY Compression encoding: [0x31,0xfe]491; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]492; NF-NEXT: movl %esi, d64(%rip) # encoding: [0x89,0x35,A,A,A,A]493; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte494; NF-NEXT: retq # encoding: [0xc3]495 %v0 = xor i32 %a, %b ; 0xff << 50496 %v1 = icmp eq i32 %v0, 0497 store i32 %v0, ptr @d64498 ret i1 %v1499}500 501define i1 @xorflag64rr(i64 %a, i64 %b) {502; CHECK-LABEL: xorflag64rr:503; CHECK: # %bb.0:504; CHECK-NEXT: xorq %rdi, %rsi # EVEX TO LEGACY Compression encoding: [0x48,0x31,0xfe]505; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]506; CHECK-NEXT: movq %rsi, d64(%rip) # encoding: [0x48,0x89,0x35,A,A,A,A]507; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte508; CHECK-NEXT: retq # encoding: [0xc3]509;510; NF-LABEL: xorflag64rr:511; NF: # %bb.0:512; NF-NEXT: xorq %rdi, %rsi # EVEX TO LEGACY Compression encoding: [0x48,0x31,0xfe]513; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]514; NF-NEXT: movq %rsi, d64(%rip) # encoding: [0x48,0x89,0x35,A,A,A,A]515; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte516; NF-NEXT: retq # encoding: [0xc3]517 %v0 = xor i64 %a, %b ; 0xff << 50518 %v1 = icmp eq i64 %v0, 0519 store i64 %v0, ptr @d64520 ret i1 %v1521}522 523define i1 @xorflag8rm(ptr %ptr, i8 %b) {524; CHECK-LABEL: xorflag8rm:525; CHECK: # %bb.0:526; CHECK-NEXT: xorb (%rdi), %sil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x32,0x37]527; CHECK-NEXT: xorb $-1, %al, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf0,0xff]528; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]529; CHECK-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]530; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte531; CHECK-NEXT: retq # encoding: [0xc3]532;533; NF-LABEL: xorflag8rm:534; NF: # %bb.0:535; NF-NEXT: {nf} xorb (%rdi), %sil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x32,0x37]536; NF-NEXT: xorb $-1, %al, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf0,0xff]537; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]538; NF-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]539; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte540; NF-NEXT: retq # encoding: [0xc3]541 %a = load i8, ptr %ptr542 %xor = xor i8 %b, -1543 %v0 = xor i8 %a, %xor ; 0xff << 50544 %v1 = icmp eq i8 %v0, 0545 store i8 %v0, ptr @d64546 ret i1 %v1547}548 549define i1 @xorflag16rm(ptr %ptr, i16 %b) {550; CHECK-LABEL: xorflag16rm:551; CHECK: # %bb.0:552; CHECK-NEXT: xorw (%rdi), %si, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x33,0x37]553; CHECK-NEXT: xorw $-1, %ax, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf0,0xff]554; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]555; CHECK-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]556; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte557; CHECK-NEXT: retq # encoding: [0xc3]558;559; NF-LABEL: xorflag16rm:560; NF: # %bb.0:561; NF-NEXT: {nf} xorw (%rdi), %si, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x33,0x37]562; NF-NEXT: xorw $-1, %ax, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf0,0xff]563; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]564; NF-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]565; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte566; NF-NEXT: retq # encoding: [0xc3]567 %a = load i16, ptr %ptr568 %xor = xor i16 %b, -1569 %v0 = xor i16 %a, %xor ; 0xff << 50570 %v1 = icmp eq i16 %v0, 0571 store i16 %v0, ptr @d64572 ret i1 %v1573}574 575define i1 @xorflag32rm(ptr %ptr, i32 %b) {576; CHECK-LABEL: xorflag32rm:577; CHECK: # %bb.0:578; CHECK-NEXT: xorl (%rdi), %esi # EVEX TO LEGACY Compression encoding: [0x33,0x37]579; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]580; CHECK-NEXT: movl %esi, d64(%rip) # encoding: [0x89,0x35,A,A,A,A]581; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte582; CHECK-NEXT: retq # encoding: [0xc3]583;584; NF-LABEL: xorflag32rm:585; NF: # %bb.0:586; NF-NEXT: xorl (%rdi), %esi # EVEX TO LEGACY Compression encoding: [0x33,0x37]587; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]588; NF-NEXT: movl %esi, d64(%rip) # encoding: [0x89,0x35,A,A,A,A]589; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte590; NF-NEXT: retq # encoding: [0xc3]591 %a = load i32, ptr %ptr592 %v0 = xor i32 %a, %b ; 0xff << 50593 %v1 = icmp eq i32 %v0, 0594 store i32 %v0, ptr @d64595 ret i1 %v1596}597 598define i1 @xorflag64rm(ptr %ptr, i64 %b) {599; CHECK-LABEL: xorflag64rm:600; CHECK: # %bb.0:601; CHECK-NEXT: xorq (%rdi), %rsi # EVEX TO LEGACY Compression encoding: [0x48,0x33,0x37]602; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]603; CHECK-NEXT: movq %rsi, d64(%rip) # encoding: [0x48,0x89,0x35,A,A,A,A]604; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte605; CHECK-NEXT: retq # encoding: [0xc3]606;607; NF-LABEL: xorflag64rm:608; NF: # %bb.0:609; NF-NEXT: xorq (%rdi), %rsi # EVEX TO LEGACY Compression encoding: [0x48,0x33,0x37]610; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]611; NF-NEXT: movq %rsi, d64(%rip) # encoding: [0x48,0x89,0x35,A,A,A,A]612; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte613; NF-NEXT: retq # encoding: [0xc3]614 %a = load i64, ptr %ptr615 %v0 = xor i64 %a, %b ; 0xff << 50616 %v1 = icmp eq i64 %v0, 0617 store i64 %v0, ptr @d64618 ret i1 %v1619}620 621define i1 @xorflag8ri(i8 %a) {622; CHECK-LABEL: xorflag8ri:623; CHECK: # %bb.0:624; CHECK-NEXT: xorb $-124, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf7,0x84]625; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]626; CHECK-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]627; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte628; CHECK-NEXT: retq # encoding: [0xc3]629;630; NF-LABEL: xorflag8ri:631; NF: # %bb.0:632; NF-NEXT: xorb $-124, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xf7,0x84]633; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]634; NF-NEXT: movb %cl, d64(%rip) # encoding: [0x88,0x0d,A,A,A,A]635; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte636; NF-NEXT: retq # encoding: [0xc3]637 %xor = xor i8 123, -1638 %v0 = xor i8 %a, %xor ; 0xff << 50639 %v1 = icmp eq i8 %v0, 0640 store i8 %v0, ptr @d64641 ret i1 %v1642}643 644define i1 @xorflag16ri(i16 %a) {645; CHECK-LABEL: xorflag16ri:646; CHECK: # %bb.0:647; CHECK-NEXT: xorw $-1235, %di, %cx # encoding: [0x62,0xf4,0x75,0x18,0x81,0xf7,0x2d,0xfb]648; CHECK-NEXT: # imm = 0xFB2D649; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]650; CHECK-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]651; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte652; CHECK-NEXT: retq # encoding: [0xc3]653;654; NF-LABEL: xorflag16ri:655; NF: # %bb.0:656; NF-NEXT: xorw $-1235, %di, %cx # encoding: [0x62,0xf4,0x75,0x18,0x81,0xf7,0x2d,0xfb]657; NF-NEXT: # imm = 0xFB2D658; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]659; NF-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]660; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte661; NF-NEXT: retq # encoding: [0xc3]662 %xor = xor i16 1234, -1663 %v0 = xor i16 %a, %xor ; 0xff << 50664 %v1 = icmp eq i16 %v0, 0665 store i16 %v0, ptr @d64666 ret i1 %v1667}668 669define i1 @xorflag32ri(i32 %a) {670; CHECK-LABEL: xorflag32ri:671; CHECK: # %bb.0:672; CHECK-NEXT: xorl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xf7,0x40,0xe2,0x01,0x00]673; CHECK-NEXT: # imm = 0x1E240674; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]675; CHECK-NEXT: movl %edi, d64(%rip) # encoding: [0x89,0x3d,A,A,A,A]676; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte677; CHECK-NEXT: retq # encoding: [0xc3]678;679; NF-LABEL: xorflag32ri:680; NF: # %bb.0:681; NF-NEXT: xorl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xf7,0x40,0xe2,0x01,0x00]682; NF-NEXT: # imm = 0x1E240683; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]684; NF-NEXT: movl %edi, d64(%rip) # encoding: [0x89,0x3d,A,A,A,A]685; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte686; NF-NEXT: retq # encoding: [0xc3]687 %v0 = xor i32 %a, 123456 ; 0xff << 50688 %v1 = icmp eq i32 %v0, 0689 store i32 %v0, ptr @d64690 ret i1 %v1691}692 693define i1 @xorflag64ri(i64 %a) {694; CHECK-LABEL: xorflag64ri:695; CHECK: # %bb.0:696; CHECK-NEXT: xorq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xf7,0x40,0xe2,0x01,0x00]697; CHECK-NEXT: # imm = 0x1E240698; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]699; CHECK-NEXT: movq %rdi, d64(%rip) # encoding: [0x48,0x89,0x3d,A,A,A,A]700; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte701; CHECK-NEXT: retq # encoding: [0xc3]702;703; NF-LABEL: xorflag64ri:704; NF: # %bb.0:705; NF-NEXT: xorq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xf7,0x40,0xe2,0x01,0x00]706; NF-NEXT: # imm = 0x1E240707; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]708; NF-NEXT: movq %rdi, d64(%rip) # encoding: [0x48,0x89,0x3d,A,A,A,A]709; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte710; NF-NEXT: retq # encoding: [0xc3]711 %v0 = xor i64 %a, 123456 ; 0xff << 50712 %v1 = icmp eq i64 %v0, 0713 store i64 %v0, ptr @d64714 ret i1 %v1715}716 717define i1 @xorflag16ri8(i16 %a) {718; CHECK-LABEL: xorflag16ri8:719; CHECK: # %bb.0:720; CHECK-NEXT: xorw $-124, %di, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf7,0x84]721; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]722; CHECK-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]723; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte724; CHECK-NEXT: retq # encoding: [0xc3]725;726; NF-LABEL: xorflag16ri8:727; NF: # %bb.0:728; NF-NEXT: xorw $-124, %di, %cx # encoding: [0x62,0xf4,0x75,0x18,0x83,0xf7,0x84]729; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]730; NF-NEXT: movw %cx, d64(%rip) # encoding: [0x66,0x89,0x0d,A,A,A,A]731; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte732; NF-NEXT: retq # encoding: [0xc3]733 %xor = xor i16 123, -1734 %v0 = xor i16 %a, %xor ; 0xff << 50735 %v1 = icmp eq i16 %v0, 0736 store i16 %v0, ptr @d64737 ret i1 %v1738}739 740define i1 @xorflag32ri8(i32 %a) {741; CHECK-LABEL: xorflag32ri8:742; CHECK: # %bb.0:743; CHECK-NEXT: xorl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xf7,0x7b]744; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]745; CHECK-NEXT: movl %edi, d64(%rip) # encoding: [0x89,0x3d,A,A,A,A]746; CHECK-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte747; CHECK-NEXT: retq # encoding: [0xc3]748;749; NF-LABEL: xorflag32ri8:750; NF: # %bb.0:751; NF-NEXT: xorl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xf7,0x7b]752; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]753; NF-NEXT: movl %edi, d64(%rip) # encoding: [0x89,0x3d,A,A,A,A]754; NF-NEXT: # fixup A - offset: 2, value: d64, kind: reloc_riprel_4byte755; NF-NEXT: retq # encoding: [0xc3]756 %v0 = xor i32 %a, 123 ; 0xff << 50757 %v1 = icmp eq i32 %v0, 0758 store i32 %v0, ptr @d64759 ret i1 %v1760}761 762define i1 @xorflag64ri8(i64 %a) {763; CHECK-LABEL: xorflag64ri8:764; CHECK: # %bb.0:765; CHECK-NEXT: xorq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xf7,0x7b]766; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]767; CHECK-NEXT: movq %rdi, d64(%rip) # encoding: [0x48,0x89,0x3d,A,A,A,A]768; CHECK-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte769; CHECK-NEXT: retq # encoding: [0xc3]770;771; NF-LABEL: xorflag64ri8:772; NF: # %bb.0:773; NF-NEXT: xorq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xf7,0x7b]774; NF-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]775; NF-NEXT: movq %rdi, d64(%rip) # encoding: [0x48,0x89,0x3d,A,A,A,A]776; NF-NEXT: # fixup A - offset: 3, value: d64, kind: reloc_riprel_4byte777; NF-NEXT: retq # encoding: [0xc3]778 %v0 = xor i64 %a, 123 ; 0xff << 50779 %v1 = icmp eq i64 %v0, 0780 store i64 %v0, ptr @d64781 ret i1 %v1782}783 784define void @xor8mr_legacy(ptr %a, i8 noundef %b) {785; CHECK-LABEL: xor8mr_legacy:786; CHECK: # %bb.0: # %entry787; CHECK-NEXT: xorb %sil, (%rdi) # encoding: [0x40,0x30,0x37]788; CHECK-NEXT: retq # encoding: [0xc3]789;790; NF-LABEL: xor8mr_legacy:791; NF: # %bb.0: # %entry792; NF-NEXT: xorb %sil, (%rdi) # encoding: [0x40,0x30,0x37]793; NF-NEXT: retq # encoding: [0xc3]794entry:795 %t= load i8, ptr %a796 %xor = xor i8 %t, %b797 store i8 %xor, ptr %a798 ret void799}800 801define void @xor16mr_legacy(ptr %a, i16 noundef %b) {802; CHECK-LABEL: xor16mr_legacy:803; CHECK: # %bb.0: # %entry804; CHECK-NEXT: xorw %si, (%rdi) # encoding: [0x66,0x31,0x37]805; CHECK-NEXT: retq # encoding: [0xc3]806;807; NF-LABEL: xor16mr_legacy:808; NF: # %bb.0: # %entry809; NF-NEXT: xorw %si, (%rdi) # encoding: [0x66,0x31,0x37]810; NF-NEXT: retq # encoding: [0xc3]811entry:812 %t= load i16, ptr %a813 %xor = xor i16 %t, %b814 store i16 %xor, ptr %a815 ret void816}817 818define void @xor32mr_legacy(ptr %a, i32 noundef %b) {819; CHECK-LABEL: xor32mr_legacy:820; CHECK: # %bb.0: # %entry821; CHECK-NEXT: xorl %esi, (%rdi) # encoding: [0x31,0x37]822; CHECK-NEXT: retq # encoding: [0xc3]823;824; NF-LABEL: xor32mr_legacy:825; NF: # %bb.0: # %entry826; NF-NEXT: xorl %esi, (%rdi) # encoding: [0x31,0x37]827; NF-NEXT: retq # encoding: [0xc3]828entry:829 %t= load i32, ptr %a830 %xor = xor i32 %t, %b831 store i32 %xor, ptr %a832 ret void833}834 835define void @xor64mr_legacy(ptr %a, i64 noundef %b) {836; CHECK-LABEL: xor64mr_legacy:837; CHECK: # %bb.0: # %entry838; CHECK-NEXT: xorq %rsi, (%rdi) # encoding: [0x48,0x31,0x37]839; CHECK-NEXT: retq # encoding: [0xc3]840;841; NF-LABEL: xor64mr_legacy:842; NF: # %bb.0: # %entry843; NF-NEXT: xorq %rsi, (%rdi) # encoding: [0x48,0x31,0x37]844; NF-NEXT: retq # encoding: [0xc3]845entry:846 %t= load i64, ptr %a847 %xor = xor i64 %t, %b848 store i64 %xor, ptr %a849 ret void850}851