[WebAssembly] Fix stack pointer store check in RegStackify
authorHeejin Ahn <aheejin@gmail.com>
Thu, 10 Jan 2019 23:12:07 +0000 (23:12 +0000)
committerHeejin Ahn <aheejin@gmail.com>
Thu, 10 Jan 2019 23:12:07 +0000 (23:12 +0000)
commite73c7a1ab25a484161a9951fadbd93dea4c60d60
treef9f6d79631ff773c7e1665397e8ddca2d200d354
parenta82855a5d79686dcc78137506ad3ffdfc007f1ca
[WebAssembly] Fix stack pointer store check in RegStackify

Summary:
We now use __stack_pointer global and global.get/global.set instruction.
This fixes the checking routine for stack_pointer writes accordingly.

This also fixes the existing __stack_pointer test in reg-stackify.ll:
That test used to pass not because of __stack_pointer clashes but
because the function `stackpointer_callee` was not marked as `readnone`,
so it was assumed to possibly write to memory arbitraily, and
`global.set` instruction was marked as `mayStore` in the .td definition,
so they were identified as intervening writes. After we added `readnone`
to its attribute, this test fails without this patch.

Reviewers: dschuff, sunfish

Subscribers: jgravelle-google, sbc100, llvm-commits

Differential Revision: https://reviews.llvm.org/D56094

llvm-svn: 350906
llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
llvm/test/CodeGen/WebAssembly/reg-stackify.ll