[llvm-dev] load instruction erroneously removed by GVN

Mikael Holmén via llvm-dev llvm-dev at lists.llvm.org
Sun Aug 9 23:30:26 PDT 2015


Hi,

On 08/07/2015 10:30 PM, Nick Lewycky wrote:
[...]

>         Depends.  What is the exact declaration of format_long?
>
>
>     In the input .ll file it is:
>
>     ; Function Attrs: minsize optsize
>     define internal i16 @format_long(i16* %res.8.par, i16 %base.9.par,
>     i32 %x.10.par) #3 {
>
>     which is later changed somewhere in opt to:
>
>     ; Function Attrs: minsize nounwind optsize
>     define internal fastcc i16 @format_long(i16* %res.8.par, i16
>     %base.9.par, i32 %x.10.par) #2 {
>
>
> That's part of it, but we also need to see what #3 and #2 refer to in
> this context. Those should be grouped at the end of your .ll, something like
>
> attributes #3 = { nobuiltin nounwind "less-precise-fpmad"="false"
> "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> "use-soft-float"="false" }

The attributes are

attributes #3 = { minsize optsize "target-cpu"="phoenixIV" }

and

attributes #2 = { minsize nounwind optsize "target-cpu"="phoenixIV" }

(I'm compiling for my out-of-tree target, thus the 
"target-cpu"="phoenixIV").

So no readonly or readnone attributes.

Thanks,
Mikael

>
> or
>
> attributes #2 = { nounwind readonly }
>
> If @format_long is marked with the 'readonly' or 'readnone' attribute
> then GVN would be justified in doing the transformation you've described.
>
> Nick


More information about the llvm-dev mailing list