From 74f5fd4e32b8761045c8c0187f7cdf9b03301838 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Fri, 16 Nov 2018 18:59:51 +0000 Subject: [PATCH] [WebAssembly] Default to static reloc model Differential Revision: https://reviews.llvm.org/D54637 llvm-svn: 347073 --- llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 8 ++++++-- llvm/test/CodeGen/WebAssembly/global.ll | 2 +- llvm/test/CodeGen/WebAssembly/vtable.ll | 8 ++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 954c8a6..c28cfde 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -82,8 +82,12 @@ extern "C" void LLVMInitializeWebAssemblyTarget() { //===----------------------------------------------------------------------===// static Reloc::Model getEffectiveRelocModel(Optional RM) { - if (!RM.hasValue()) - return Reloc::PIC_; + if (!RM.hasValue()) { + // Default to static relocation model. This should always be more optimial + // than PIC since the static linker can determine all global addresses and + // assume direct function calls. + return Reloc::Static; + } return *RM; } diff --git a/llvm/test/CodeGen/WebAssembly/global.ll b/llvm/test/CodeGen/WebAssembly/global.ll index e421167..226189f 100644 --- a/llvm/test/CodeGen/WebAssembly/global.ll +++ b/llvm/test/CodeGen/WebAssembly/global.ll @@ -205,7 +205,7 @@ define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) { ; CHECK-NEXT: .skip 8 ; CHECK-NEXT: .size array, 8 ; CHECK: .type pointer_to_array,@object -; CHECK-NEXT: .section .data.rel.ro.pointer_to_array, +; CHECK-NEXT: .section .rodata.pointer_to_array, ; CHECK-NEXT: .globl pointer_to_array ; CHECK-NEXT: .p2align 2 ; CHECK-NEXT: pointer_to_array: diff --git a/llvm/test/CodeGen/WebAssembly/vtable.ll b/llvm/test/CodeGen/WebAssembly/vtable.ll index 0d0b53c..6a0d902 100644 --- a/llvm/test/CodeGen/WebAssembly/vtable.ll +++ b/llvm/test/CodeGen/WebAssembly/vtable.ll @@ -36,7 +36,7 @@ target triple = "wasm32-unknown-unknown" @_ZTS1D = constant [3 x i8] c"1D\00" ; VTABLE: .type _ZTV1A,@object -; VTABLE-NEXT: .section .data.rel.ro._ZTV1A, +; VTABLE-NEXT: .section .rodata._ZTV1A, ; VTABLE-NEXT: .globl _ZTV1A ; VTABLE-LABEL: _ZTV1A: ; VTABLE-NEXT: .int32 0 @@ -47,7 +47,7 @@ target triple = "wasm32-unknown-unknown" ; VTABLE-NEXT: .size _ZTV1A, 20 @_ZTV1A = constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast (%struct.A* (%struct.A*)* @_ZN1AD2Ev to i8*), i8* bitcast (void (%struct.A*)* @_ZN1AD0Ev to i8*), i8* bitcast (void (%struct.A*)* @_ZN1A3fooEv to i8*)], align 4 ; VTABLE: .type _ZTV1B,@object -; VTABLE-NEXT: .section .data.rel.ro._ZTV1B, +; VTABLE-NEXT: .section .rodata._ZTV1B, ; VTABLE-NEXT: .globl _ZTV1B ; VTABLE-LABEL: _ZTV1B: ; VTABLE-NEXT: .int32 0 @@ -58,7 +58,7 @@ target triple = "wasm32-unknown-unknown" ; VTABLE-NEXT: .size _ZTV1B, 20 @_ZTV1B = constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1B to i8*), i8* bitcast (%struct.A* (%struct.A*)* @_ZN1AD2Ev to i8*), i8* bitcast (void (%struct.B*)* @_ZN1BD0Ev to i8*), i8* bitcast (void (%struct.B*)* @_ZN1B3fooEv to i8*)], align 4 ; VTABLE: .type _ZTV1C,@object -; VTABLE-NEXT: .section .data.rel.ro._ZTV1C, +; VTABLE-NEXT: .section .rodata._ZTV1C, ; VTABLE-NEXT: .globl _ZTV1C ; VTABLE-LABEL: _ZTV1C: ; VTABLE-NEXT: .int32 0 @@ -69,7 +69,7 @@ target triple = "wasm32-unknown-unknown" ; VTABLE-NEXT: .size _ZTV1C, 20 @_ZTV1C = constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1C to i8*), i8* bitcast (%struct.A* (%struct.A*)* @_ZN1AD2Ev to i8*), i8* bitcast (void (%struct.C*)* @_ZN1CD0Ev to i8*), i8* bitcast (void (%struct.C*)* @_ZN1C3fooEv to i8*)], align 4 ; VTABLE: .type _ZTV1D,@object -; VTABLE-NEXT: .section .data.rel.ro._ZTV1D, +; VTABLE-NEXT: .section .rodata._ZTV1D, ; VTABLE-NEXT: .globl _ZTV1D ; VTABLE-LABEL: _ZTV1D: ; VTABLE-NEXT: .int32 0 -- 2.7.4