[LLVMdev] Simple question on sign

James Molloy james.molloy at arm.com
Thu Feb 23 06:23:01 PST 2012


Hi Sam,

I am not a MIPS expert by any means, so YMMV, but: MIPS addu only differs to
"add" in its (non)setting of the overflow flag. Because LLVM doesn't provide
a way via the IR to access the overflow flag, a special notation isn't
required in the IR to distinguish the two operations.

Do you have another example?

Cheers,

James

-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of sam parker
Sent: 23 February 2012 10:36
To: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] Simple question on sign


Thanks for the replies guys but I think I should have phrased my question
better... looking at the Mips backend there are machine instructions that
operate on signed and unsigned data, such as add and addu. And like Mips, I
need to specify unsigned specific instructions, so how do these get chosen
between if the LLVM IR does not carry type data? A very general point in the
right direction is all i need and would most appreciate it. sorry if i'm
being dense.

sam


James Molloy-3 wrote:
> 
> Hi Sam,
> 
> Whereas most languages track signedness on the variable/value level, LLVM
> IR
> takes a more machine-like approach of having the sign apply to the
> instruction rather than the value.
> 
> It is therefore the frontend (or whatever is initially producing the LLVM
> IR) that should know whether an operation should be signed or unsigned.
> 
> Hopefully that makes sense,
> 
> Cheers,
> 
> James
> 
> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
> Behalf Of sam parker
> Sent: 23 February 2012 09:45
> To: llvmdev at cs.uiuc.edu
> Subject: Re: [LLVMdev] Simple question on sign
> 
> 
> how does llvm decide when to use unsigned instructions then? such as
> unsigned
> adds and loads? I'm trying to describe some multiply shift ops and getting
> a
> bit stuck differentiating between signed and unsigned.
> 
> sam
>  
> 
> Eli Friedman-2 wrote:
>> 
>> On Wed, Feb 22, 2012 at 4:28 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
>> On Wed, Feb 22, 2012 at 4:28 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
>>> How do you determine if a shift is signed or not?
>>>
>>> ashr = always signed?
>> 
>> Essentially, yes.
>> 
>>> lshr = always unsigned?
>> 
>> Essentially, yes.
>> 
>>> shl = always signed?
>> 
>> Signed left shift and unsigned left shift are both shl.
>> 
>> http://llvm.org/docs/LangRef.html#i_shl describes the semantics of
>> shifts.
>> 
>>> The CmpInst has the "isSigned()" function, but it appears that every
>>> other
>>> Instruction I've looked at doesn't seem to have this.
>> 
>> There isn't an isSigned() function because the query doesn't really
>> make sense.  LLVM IR doesn't in general track whether a value is
>> signed or unsigned.
>> 
>> -Eli
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> 
>> 
> 
> -- 
> View this message in context:
> http://old.nabble.com/Simple-question-on-sign-tp33375005p33376706.html
> Sent from the LLVM - Dev mailing list archive at Nabble.com.
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 
> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 

-- 
View this message in context:
http://old.nabble.com/Simple-question-on-sign-tp33375005p33376946.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.

_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev








More information about the llvm-dev mailing list