[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