<div dir="ltr">Hi Fangrui,<div><br></div><div>It took a while to spot it, but this commit broke lli for ARM targets one of the first bot issue was this one:</div><div><a href="http://lab.llvm.org:8011/#/builders/26/builds/874">http://lab.llvm.org:8011/#/builders/26/builds/874</a><br></div><div><br></div><div>If it help[s, here are some GDB outputs for one of these tests segfault:</div><div><br></div><div>Starting program: lli -O0 -disable-lazy-compilation=false /home/yvan.roux/srcs/llvm-project/llvm/test/ExecutionEngine/MCJIT/pr13727.ll</div><div>Thread debugging using libthread_db enabled]</div><div>Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".                                                                                                                                                                                                                                                                                                                                                                                                                Program received signal SIGSEGV, Segmentation fault.</div><div>0xf77ee04c in main () </div><div>(gdb) bt</div><div>#0  0xf77ee04c in main ()</div><div>#1  0x0068ef4a in llvm::MCJIT::runFunction(llvm::Function*, llvm::ArrayRef<llvm::GenericValue>) ()</div><div>#2  0x0063c48c in llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const* const*) ()                                                  #3  0x00213bca in main ()</div><div><br></div><div>Cheers,</div><div>Yvan</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 31 Dec 2020 at 01:58, Fangrui Song via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Fangrui Song<br>
Date: 2020-12-30T16:57:50-08:00<br>
New Revision: 2047c10c22b071cccc57a7e2779d6603512e9113<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/2047c10c22b071cccc57a7e2779d6603512e9113" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/2047c10c22b071cccc57a7e2779d6603512e9113</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/2047c10c22b071cccc57a7e2779d6603512e9113.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/2047c10c22b071cccc57a7e2779d6603512e9113.diff</a><br>
<br>
LOG: [TargetMachine] Drop implied dso_local for definitions in ELF static relocation model/PIE<br>
<br>
TargetMachine::shouldAssumeDSOLocal currently implies dso_local for such definitions.<br>
<br>
Since clang -fno-pic add the dso_local specifier, we don't need to special case.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/lib/Target/TargetMachine.cpp<br>
    llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll<br>
    llvm/test/CodeGen/PowerPC/dsolocal-static.ll<br>
    llvm/test/CodeGen/X86/linux-preemption.ll<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp<br>
index b45b8e354b3a..da295a8a3de9 100644<br>
--- a/llvm/lib/Target/TargetMachine.cpp<br>
+++ b/llvm/lib/Target/TargetMachine.cpp<br>
@@ -156,16 +156,6 @@ bool TargetMachine::shouldAssumeDSOLocal(const Module &M,<br>
<br>
   assert(TT.isOSBinFormatELF() || TT.isOSBinFormatWasm());<br>
   assert(RM != Reloc::DynamicNoPIC);<br>
-<br>
-  bool IsExecutable =<br>
-      RM == Reloc::Static || M.getPIELevel() != PIELevel::Default;<br>
-  if (IsExecutable) {<br>
-    // If the symbol is defined, it cannot be preempted.<br>
-    if (!GV->isDeclarationForLinker())<br>
-      return true;<br>
-  }<br>
-<br>
-  // ELF & wasm support preemption of other symbols.<br>
   return false;<br>
 }<br>
<br>
<br>
diff  --git a/llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll b/llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll<br>
index e8ac7b6bbf5e..e739d94cd9ab 100644<br>
--- a/llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll<br>
+++ b/llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll<br>
@@ -61,8 +61,8 @@ define void @t2() nounwind ssp {<br>
<br>
 ; ARM-ELF: movw [[REG1:r[0-9]+]], :lower16:temp<br>
 ; ARM-ELF: movt [[REG1]], :upper16:temp<br>
-; ARM-ELF:      add r0, [[REG1]], #4<br>
-; ARM-ELF-NEXT: add r1, [[REG1]], #16<br>
+; ARM-ELF:      add [[REG1]], r1, #4<br>
+; ARM-ELF-NEXT: add r1, r1, #16<br>
<br>
 ; ARM: movw r2, #17<br>
 ; ARM: bl {{_?}}memcpy<br>
@@ -106,7 +106,7 @@ define void @t3() nounwind ssp {<br>
<br>
 ; ARM-ELF: movw [[REG0:r[0-9]+]], :lower16:temp<br>
 ; ARM-ELF: movt [[REG0]], :upper16:temp<br>
-; ARM-ELF:      add r0, [[REG0]], #4<br>
+; ARM-ELF:      add [[REG0]], r1, #4<br>
 ; ARM-ELF-NEXT: add r1, r1, #16<br>
<br>
 ; ARM: movw r2, #10<br>
<br>
diff  --git a/llvm/test/CodeGen/PowerPC/dsolocal-static.ll b/llvm/test/CodeGen/PowerPC/dsolocal-static.ll<br>
index a4ef632f6877..e5002cc59b30 100644<br>
--- a/llvm/test/CodeGen/PowerPC/dsolocal-static.ll<br>
+++ b/llvm/test/CodeGen/PowerPC/dsolocal-static.ll<br>
@@ -3,8 +3,8 @@<br>
 @default = global i32 55<br>
 define dso_local i32* @get_default_global() {<br>
 ; CHECK-LABEL: get_default_global:<br>
-; CHECK:         addis 3, 2, default@toc@ha<br>
-; CHECK-NEXT:    addi 3, 3, default@toc@l<br>
+; CHECK:         addis 3, 2, .LC{{.*}}@toc@ha<br>
+; CHECK-NEXT:    ld 3, .LC{{.*}}@toc@l(3)<br>
 ; CHECK-NEXT:    blr<br>
   ret i32* @default<br>
 }<br>
@@ -21,8 +21,8 @@ define dso_local i32* @get_local_global() {<br>
 @preemptable_global = dso_preemptable global i32 42<br>
 define dso_local i32* @get_preemptable_global() {<br>
 ; CHECK-LABEL: get_preemptable_global:<br>
-; CHECK:         addis 3, 2, preemptable_global@toc@ha<br>
-; CHECK-NEXT:    addi 3, 3, preemptable_global@toc@l<br>
+; CHECK:         addis 3, 2, .LC{{.*}}@toc@ha<br>
+; CHECK-NEXT:    ld 3, .LC{{.*}}@toc@l(3)<br>
 ; CHECK-NEXT:    blr<br>
   ret i32* @preemptable_global<br>
 }<br>
@@ -63,8 +63,7 @@ define signext i32 @default_function(i32 %i) {<br>
 define dso_local signext i32 @default_function_caller(i32 %i) {<br>
 ; CHECK-LABEL: default_function_caller:<br>
 ; CHECK:         bl default_function<br>
-; CHECK-NOT:     nop<br>
-; CHECK:         blr<br>
+; CHECK-NEXT:    nop<br>
   %call = notail call signext i32 @default_function(i32 signext %i)<br>
   ret i32 %call<br>
 }<br>
@@ -87,8 +86,7 @@ define dso_preemptable signext i32 @preemptable_function(i32 %i) {<br>
 define dso_local signext i32 @preemptable_function_caller(i32 %i) {<br>
 ; CHECK-LABEL: preemptable_function_caller:<br>
 ; CHECK:         bl preemptable_function<br>
-; CHECK-NOT:     nop<br>
-; CHECK:         blr<br>
+; CHECK-NEXT:    nop<br>
   %call = notail call signext i32 @preemptable_function(i32 signext %i)<br>
   ret i32 %call<br>
 }<br>
<br>
diff  --git a/llvm/test/CodeGen/X86/linux-preemption.ll b/llvm/test/CodeGen/X86/linux-preemption.ll<br>
index 4739e6cec011..eae14f98cf0d 100644<br>
--- a/llvm/test/CodeGen/X86/linux-preemption.ll<br>
+++ b/llvm/test/CodeGen/X86/linux-preemption.ll<br>
@@ -17,7 +17,7 @@ define i32* @get_strong_default_global() {<br>
   ret i32* @strong_default_global<br>
 }<br>
 ; CHECK: movq strong_default_global@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_default_global, %eax<br>
+; STATIC: movq strong_default_global@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_default_global@GOT(%eax), %eax<br>
<br>
 @strong_hidden_global = hidden global i32 42<br>
@@ -33,7 +33,7 @@ define i32* @get_weak_default_global() {<br>
   ret i32* @weak_default_global<br>
 }<br>
 ; CHECK: movq weak_default_global@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_default_global, %eax<br>
+; STATIC: movq weak_default_global@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_default_global@GOT(%eax), %eax<br>
<br>
 @external_default_global = external global i32<br>
@@ -74,7 +74,7 @@ define i32* @get_strong_preemptable_global() {<br>
   ret i32* @strong_preemptable_global<br>
 }<br>
 ; CHECK: movq strong_preemptable_global@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_preemptable_global, %eax<br>
+; STATIC: movq strong_preemptable_global@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_preemptable_global@GOT(%eax), %eax<br>
<br>
 @weak_preemptable_global = weak dso_preemptable global i32 42<br>
@@ -82,7 +82,7 @@ define i32* @get_weak_preemptable_global() {<br>
   ret i32* @weak_preemptable_global<br>
 }<br>
 ; CHECK: movq weak_preemptable_global@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_preemptable_global, %eax<br>
+; STATIC: movq weak_preemptable_global@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_preemptable_global@GOT(%eax), %eax<br>
<br>
 @external_preemptable_global = external dso_preemptable global i32<br>
@@ -101,7 +101,7 @@ define i32* @get_strong_default_alias() {<br>
   ret i32* @strong_default_alias<br>
 }<br>
 ; CHECK: movq strong_default_alias@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_default_alias, %eax<br>
+; STATIC: movq strong_default_alias@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_default_alias@GOT(%eax), %eax<br>
<br>
 @strong_hidden_alias = hidden alias i32, i32* @aliasee<br>
@@ -117,7 +117,7 @@ define i32* @get_weak_default_alias() {<br>
   ret i32* @weak_default_alias<br>
 }<br>
 ; CHECK: movq weak_default_alias@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_default_alias, %eax<br>
+; STATIC: movq weak_default_alias@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_default_alias@GOT(%eax), %eax<br>
<br>
 @strong_local_alias = dso_local alias i32, i32* @aliasee<br>
@@ -142,7 +142,7 @@ define i32* @get_strong_preemptable_alias() {<br>
   ret i32* @strong_preemptable_alias<br>
 }<br>
 ; CHECK: movq strong_preemptable_alias@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_preemptable_alias, %eax<br>
+; STATIC: movq strong_preemptable_alias@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_preemptable_alias@GOT(%eax), %eax<br>
<br>
 @weak_preemptable_alias = weak dso_preemptable alias i32, i32* @aliasee<br>
@@ -150,7 +150,7 @@ define i32* @get_weak_preemptable_alias() {<br>
   ret i32* @weak_preemptable_alias<br>
 }<br>
 ; CHECK: movq weak_preemptable_alias@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_preemptable_alias, %eax<br>
+; STATIC: movq weak_preemptable_alias@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_preemptable_alias@GOT(%eax), %eax<br>
<br>
 ; functions<br>
@@ -162,7 +162,7 @@ define void()* @get_strong_default_function() {<br>
   ret void()* @strong_default_function<br>
 }<br>
 ; CHECK: movq strong_default_function@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_default_function, %eax<br>
+; STATIC: movq strong_default_function@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_default_function@GOT(%eax), %eax<br>
<br>
 define hidden void @strong_hidden_function() {<br>
@@ -182,7 +182,7 @@ define void()* @get_weak_default_function() {<br>
   ret void()* @weak_default_function<br>
 }<br>
 ; CHECK: movq weak_default_function@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_default_function, %eax<br>
+; STATIC: movq weak_default_function@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_default_function@GOT(%eax), %eax<br>
<br>
 declare void @external_default_function()<br>
@@ -231,7 +231,7 @@ define void()* @get_strong_preemptable_function() {<br>
   ret void()* @strong_preemptable_function<br>
 }<br>
 ; CHECK: movq strong_preemptable_function@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $strong_preemptable_function, %eax<br>
+; STATIC: movq strong_preemptable_function@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl strong_preemptable_function@GOT(%eax), %eax<br>
<br>
 define weak dso_preemptable void @weak_preemptable_function() {<br>
@@ -241,7 +241,7 @@ define void()* @get_weak_preemptable_function() {<br>
   ret void()* @weak_preemptable_function<br>
 }<br>
 ; CHECK: movq weak_preemptable_function@GOTPCREL(%rip), %rax<br>
-; STATIC: movl $weak_preemptable_function, %eax<br>
+; STATIC: movq weak_preemptable_function@GOTPCREL(%rip), %rax<br>
 ; CHECK32: movl weak_preemptable_function@GOT(%eax), %eax<br>
<br>
 declare dso_preemptable void @external_preemptable_function()<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>