[MC][X86] Fix != result for two register operands
authorFangrui Song <i@maskray.me>
Sun, 14 May 2023 18:37:36 +0000 (11:37 -0700)
committerFangrui Song <i@maskray.me>
Sun, 14 May 2023 18:37:36 +0000 (11:37 -0700)
Fixes: 05b589101e7dadce267881e5b0832882f95a9908 (D47545)
llvm/lib/MC/MCExpr.cpp
llvm/test/MC/X86/pr37425.s [deleted file]
llvm/test/MC/X86/register-assignment.s [new file with mode: 0644]

index 04682fdc7ecec9eb00816b33ae94b5d668e4765b..210ed0f8692925e58e4570394c5d21891e311e58 100644 (file)
@@ -892,7 +892,7 @@ bool MCExpr::evaluateAsRelocatableImpl(MCValue &Res, const MCAssembler *Asm,
           Res = MCValue::get(L->isEqualTo(R) ? -1 : 0);
           return true;
         case MCBinaryExpr::NE:
-          Res = MCValue::get(R->isEqualTo(R) ? 0 : -1);
+          Res = MCValue::get(L->isEqualTo(R) ? 0 : -1);
           return true;
         default:
           break;
diff --git a/llvm/test/MC/X86/pr37425.s b/llvm/test/MC/X86/pr37425.s
deleted file mode 100644 (file)
index 2cfa5e9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-// RUN: llvm-mc -triple x86_64-unknown-unknown %s -o -      | FileCheck %s
-       
-// CHECK-NOT: .set var_xdata
-var_xdata = %rcx
-
-// CHECK: xorq %rcx, %rcx
-xorq var_xdata, var_xdata
-
-// CHECK: .data
-// CHECK-NEXT: .byte 1 
-.data 
-.if var_xdata == %rax
-  .byte 0
-.elseif var_xdata == %rcx
-  .byte 1
-.else
-  .byte 2      
-.endif
-
-       
diff --git a/llvm/test/MC/X86/register-assignment.s b/llvm/test/MC/X86/register-assignment.s
new file mode 100644 (file)
index 0000000..84ea062
--- /dev/null
@@ -0,0 +1,27 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown %s -o -      | FileCheck %s
+       
+// CHECK-NOT: .set var_xdata
+var_xdata = %rcx
+
+// CHECK: xorq %rcx, %rcx
+xorq var_xdata, var_xdata
+
+// CHECK: .data
+// CHECK-NEXT: .byte 1 
+.data 
+.if var_xdata == %rax
+  .byte 0
+.elseif var_xdata == %rcx
+  .byte 1
+.else
+  .byte 2      
+.endif
+
+// CHECK:      .byte 1
+.if var_xdata != %rcx
+  .byte 0
+.elseif var_xdata != %rax
+  .byte 1
+.else
+  .byte 2
+.endif