Skip to content

Commit 91b42d5

Browse files
author
badumbatish
committed
[WebAssembly] Add guard for global folding
1 parent 0a00fda commit 91b42d5

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,15 @@ bool WebAssemblyDAGToDAGISel::SelectAddrAddOperands(MVT OffsetType, SDValue N,
356356
}
357357

358358
// Fold target global addresses into the offset.
359-
if (Op.getOpcode() == WebAssemblyISD::Wrapper)
360-
Op = Op.getOperand(0);
361-
362-
if (Op.getOpcode() == ISD::TargetGlobalAddress) {
363-
Addr = OtherOp;
364-
Offset = Op;
365-
return true;
359+
if (!TM.isPositionIndependent()) {
360+
if (Op.getOpcode() == WebAssemblyISD::Wrapper)
361+
Op = Op.getOperand(0);
362+
363+
if (Op.getOpcode() == ISD::TargetGlobalAddress) {
364+
Addr = OtherOp;
365+
Offset = Op;
366+
return true;
367+
}
366368
}
367369
}
368370
return false;

llvm/test/CodeGen/WebAssembly/address-offsets.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ define i32 @load_test0() {
1212
; CHECK-LABEL: load_test0:
1313
; CHECK: .functype load_test0 () -> (i32)
1414
; CHECK-NEXT: # %bb.0:
15-
; CHECK-NEXT: i32.const $push0=, 40
16-
; CHECK-NEXT: i32.load $push1=, g@GOT($pop0)
15+
; CHECK-NEXT: global.get $push0=, g@GOT
16+
; CHECK-NEXT: i32.load $push1=, 40($pop0)
1717
; CHECK-NEXT: return $pop1
1818
%t = load i32, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), align 4
1919
ret i32 %t
@@ -395,8 +395,8 @@ define void @store_test0(i32 %i) {
395395
; CHECK-LABEL: store_test0:
396396
; CHECK: .functype store_test0 (i32) -> ()
397397
; CHECK-NEXT: # %bb.0:
398-
; CHECK-NEXT: i32.const $push0=, 40
399-
; CHECK-NEXT: i32.store g@GOT($pop0), $0
398+
; CHECK-NEXT: global.get $push0=, g@GOT
399+
; CHECK-NEXT: i32.store 40($pop0), $0
400400
; CHECK-NEXT: return
401401
store i32 %i, ptr getelementptr inbounds ([0 x i32], ptr @g, i32 0, i32 10), align 4
402402
ret void

llvm/test/CodeGen/WebAssembly/eh-lsda.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ try.cont: ; preds = %entry, %catch.start
7373
; In case of PIC, we make GCC_except_table symbols a relative on based on
7474
; __memory_base.
7575
; PIC: global.get $push[[CONTEXT:.*]]=, __wasm_lpad_context@GOT
76+
; PIC-NEXT: local.tee $push{{.*}}=, $[[CONTEXT_LOCAL:.*]]=, $pop[[CONTEXT]]
7677
; PIC: global.get $push[[MEMORY_BASE:.*]]=, __memory_base
7778
; PIC-NEXT: i[[PTR]].const $push[[EXCEPT_TABLE_REL:.*]]=, GCC_except_table1@MBREL
7879
; PIC-NEXT: i[[PTR]].add $push[[EXCEPT_TABLE:.*]]=, $pop[[MEMORY_BASE]], $pop[[EXCEPT_TABLE_REL]]
79-
; PIC-NEXT: i[[PTR]].store __wasm_lpad_context@GOT(${{.*}}), $pop[[EXCEPT_TABLE]]
80+
; PIC-NEXT: i[[PTR]].store {{[48]}}($[[CONTEXT_LOCAL]]), $pop[[EXCEPT_TABLE]]
8081

8182
; CHECK: .section .rodata.gcc_except_table,"",@
8283
; CHECK-NEXT: .p2align 2

0 commit comments

Comments
 (0)