[X86] Attempt to fix ubsan failure.
authorCraig Topper <craig.topper@sifive.com>
Fri, 10 Feb 2023 18:02:51 +0000 (10:02 -0800)
committerCraig Topper <craig.topper@sifive.com>
Fri, 10 Feb 2023 18:02:51 +0000 (10:02 -0800)
operator~ promote the single bit input to int. The ~ will cause the upper
31 bits to become 1s making it a negative value. This is undefined for
shift.

Mask it back down to a single bit.

The extra 1s were being shifted to bit 8 and above and the they aren't
used by the emitByte call so this shouldn't be a functional change.

llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp

index 84b11af..cbdcba1 100644 (file)
@@ -219,7 +219,7 @@ public:
       return;
     case VEX2:
       emitByte(0xC5, OS);
-      emitByte(~R << 7 | LastPayload, OS);
+      emitByte(((~R) & 1) << 7 | LastPayload, OS);
       return;
     case VEX3:
     case XOP: