Skip to content

Commit 9ae95a0

Browse files
committed
[Sparc] Remove cast that truncates immediate operands to 32 bits.
Patch by: Mark Kettenis Test provided by Jessica Clarke. Differential Revision: https://reviews.llvm.org/D87210
1 parent 64f2855 commit 9ae95a0

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

llvm/lib/Target/Sparc/SparcAsmPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
351351
break;
352352

353353
case MachineOperand::MO_Immediate:
354-
O << (int)MO.getImm();
354+
O << MO.getImm();
355355
break;
356356
case MachineOperand::MO_MachineBasicBlock:
357357
MO.getMBB()->getSymbol()->print(O, MAI);

llvm/test/CodeGen/SPARC/inlineasm-v9.ll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,12 @@ entry:
3939
tail call void asm sideeffect "faddq $0,$1,$2", "{f40},{f40},{f40}"(fp128 0xL0, fp128 0xL0, fp128 0xL0)
4040
ret void
4141
}
42+
43+
;; Ensure that 64-bit immediates aren't truncated
44+
; CHECK-LABEL: test_large_immediate
45+
; CHECK: or %o0, %lo(4294967296), %o0
46+
define i64 @test_large_immediate(i64) {
47+
entry:
48+
%1 = tail call i64 asm "or $0, %lo($1), $0", "=r,i,r"(i64 4294967296, i64 %0)
49+
ret i64 %1
50+
}

0 commit comments

Comments
 (0)