AMDGPU: Sign extend constants when splitting them
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 8 Sep 2016 17:44:36 +0000 (17:44 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 8 Sep 2016 17:44:36 +0000 (17:44 +0000)
This will confuse later passes which try to look at the
immediate value and don't truncate first.

llvm-svn: 280974

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

index 5b8bbc31a732d2a1ef8838ce34aabdf63e7e5e89..4c69a39312e31385efdde634a30ac028452961d3 100644 (file)
@@ -1990,11 +1990,10 @@ MachineOperand SIInstrInfo::buildExtractSubRegOrImm(
   unsigned SubIdx,
   const TargetRegisterClass *SubRC) const {
   if (Op.isImm()) {
-    // XXX - Is there a better way to do this?
     if (SubIdx == AMDGPU::sub0)
-      return MachineOperand::CreateImm(Op.getImm() & 0xFFFFFFFF);
+      return MachineOperand::CreateImm(static_cast<int32_t>(Op.getImm()));
     if (SubIdx == AMDGPU::sub1)
-      return MachineOperand::CreateImm(Op.getImm() >> 32);
+      return MachineOperand::CreateImm(static_cast<int32_t>(Op.getImm() >> 32));
 
     llvm_unreachable("Unhandled register index for immediate");
   }