[lld] r321241 - [WebAssembly] Improve weak alias tests cases

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 20 18:30:09 PST 2017


Author: sbc
Date: Wed Dec 20 18:30:09 2017
New Revision: 321241

URL: http://llvm.org/viewvc/llvm-project?rev=321241&view=rev
Log:
[WebAssembly] Improve weak alias tests cases

Based on: https://github.com/WebAssembly/tool-conventions/issues/34

Currently weak-alias-overide.ll exhibits incorrect
behaviour in that call_direct() calls the wrong function.

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

Modified:
    lld/trunk/test/wasm/Inputs/weak-alias.ll
    lld/trunk/test/wasm/weak-alias-overide.ll
    lld/trunk/test/wasm/weak-alias.ll

Modified: lld/trunk/test/wasm/Inputs/weak-alias.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/Inputs/weak-alias.ll?rev=321241&r1=321240&r2=321241&view=diff
==============================================================================
--- lld/trunk/test/wasm/Inputs/weak-alias.ll (original)
+++ lld/trunk/test/wasm/Inputs/weak-alias.ll Wed Dec 20 18:30:09 2017
@@ -1,13 +1,41 @@
 ; Function Attrs: norecurse nounwind readnone
-define i32 @foo() #0 {
+define i32 @direct_fn() #0 {
 entry:
   ret i32 0
 }
 
- at bar = weak alias i32 (), i32 ()* @foo
+ at alias_fn = weak alias i32 (), i32 ()* @direct_fn
 
-define i32 @call_bar() #0 {
+define i32 @call_direct() #0 {
 entry:
-  %call = call i32 @bar()
+  %call = call i32 @direct_fn()
+  ret i32 %call
+}
+
+define i32 @call_alias() #0 {
+entry:
+  %call = call i32 @alias_fn()
+  ret i32 %call
+}
+
+define i32 @call_alias_ptr() #0 {
+entry:
+; TODO(sbc): This code currently causes linker failures:
+; LLVM ERROR: symbol not found table index space: alias_fn
+; See: https://github.com/WebAssembly/tool-conventions/issues/34#
+;  %fnptr = alloca i32 ()*, align 8
+;  store i32 ()* @alias_fn, i32 ()** %fnptr, align 8
+;  %0 = load i32 ()*, i32 ()** %fnptr, align 8
+;  %call = call i32 %0()
+;  ret i32 %call
+   ret i32 1
+}
+
+define i32 @call_direct_ptr() #0 {
+entry:
+  %fnptr = alloca i32 ()*, align 8
+  store i32 ()* @direct_fn, i32 ()** %fnptr, align 8
+  %0 = load i32 ()*, i32 ()** %fnptr, align 8
+  %call = call i32 %0()
   ret i32 %call
 }

Modified: lld/trunk/test/wasm/weak-alias-overide.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/weak-alias-overide.ll?rev=321241&r1=321240&r2=321241&view=diff
==============================================================================
--- lld/trunk/test/wasm/weak-alias-overide.ll (original)
+++ lld/trunk/test/wasm/weak-alias-overide.ll Wed Dec 20 18:30:09 2017
@@ -3,17 +3,17 @@
 ; RUN: lld -flavor wasm %t.o %t2.o -o %t.wasm
 ; RUN: obj2yaml %t.wasm | FileCheck %s
 
-; Test that the strongly defined bar is used correctly despite the existence
-; of the weak alias
+; Test that the strongly defined alias_fn from this file is used both here
+; and in call_alias.
 
-define i32 @bar() local_unnamed_addr #1 {
+define i32 @alias_fn() local_unnamed_addr #1 {
   ret i32 1
 }
 
 ; Function Attrs: nounwind uwtable
 define void @_start() local_unnamed_addr #1 {
 entry:
-  %call = tail call i32 @bar() #2
+  %call = tail call i32 @alias_fn() #2
   ret void
 }
 
@@ -30,14 +30,14 @@ entry:
 ; CHECK-NEXT:         ReturnType:      NORESULT
 ; CHECK-NEXT:         ParamTypes:
 ; CHECK-NEXT:   - Type:            FUNCTION
-; CHECK-NEXT:     FunctionTypes:   [ 0, 1, 0, 0 ]
+; CHECK-NEXT:     FunctionTypes:   [ 0, 1, 0, 0, 0, 0, 0 ]
 ; CHECK-NEXT:   - Type:            TABLE
 ; CHECK-NEXT:     Tables:
 ; CHECK-NEXT:       - ElemType:        ANYFUNC
 ; CHECK-NEXT:         Limits:
 ; CHECK-NEXT:           Flags:           [ HAS_MAX ]
-; CHECK-NEXT:           Initial:         0x00000001
-; CHECK-NEXT:           Maximum:         0x00000001
+; CHECK-NEXT:           Initial:         0x00000002
+; CHECK-NEXT:           Maximum:         0x00000002
 ; CHECK-NEXT:   - Type:            MEMORY
 ; CHECK-NEXT:     Memories:
 ; CHECK-NEXT:       - Initial:         0x00000002
@@ -56,15 +56,30 @@ entry:
 ; CHECK-NEXT:       - Name:            _start
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           1
-; CHECK-NEXT:       - Name:            bar
+; CHECK-NEXT:       - Name:            alias_fn
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           0
-; CHECK-NEXT:       - Name:            foo
+; CHECK-NEXT:       - Name:            direct_fn
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           2
-; CHECK-NEXT:       - Name:            call_bar
+; CHECK-NEXT:       - Name:            call_direct
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           3
+; CHECK-NEXT:       - Name:            call_alias
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           4
+; CHECK-NEXT:       - Name:            call_alias_ptr
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           5
+; CHECK-NEXT:       - Name:            call_direct_ptr
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           6
+; CHECK-NEXT:   - Type:            ELEM
+; CHECK-NEXT:     Segments:        
+; CHECK-NEXT:       - Offset:          
+; CHECK-NEXT:           Opcode:          I32_CONST
+; CHECK-NEXT:           Value:           1
+; CHECK-NEXT:         Functions:       [ 0 ]
 ; CHECK-NEXT:   - Type:            CODE
 ; CHECK-NEXT:     Functions:
 ; CHECK-NEXT:       - Locals:
@@ -75,6 +90,14 @@ entry:
 ; CHECK-NEXT:         Body:            41000B
 ; CHECK-NEXT:       - Locals:
 ; CHECK-NEXT:         Body:            1080808080000B
+; CHECK-NEXT:       - Locals:
+; CHECK-NEXT:         Body:            1080808080000B
+; CHECK-NEXT:       - Locals:          
+; CHECK-NEXT:         Body:            41010B
+; CHECK-NEXT:       - Locals:          
+; CHECK-NEXT:           - Type:            I32
+; CHECK-NEXT:             Count:           2
+; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081080808080002101200041106A24808080800020010B
 ; CHECK-NEXT:   - Type:            CUSTOM
 ; CHECK-NEXT:     Name:            linking
 ; CHECK-NEXT:     DataSize:        0
@@ -82,11 +105,17 @@ entry:
 ; CHECK-NEXT:     Name:            name
 ; CHECK-NEXT:     FunctionNames:
 ; CHECK-NEXT:       - Index:           0
-; CHECK-NEXT:         Name:            bar
+; CHECK-NEXT:         Name:            alias_fn
 ; CHECK-NEXT:       - Index:           1
 ; CHECK-NEXT:         Name:            _start
 ; CHECK-NEXT:       - Index:           2
-; CHECK-NEXT:         Name:            foo
+; CHECK-NEXT:         Name:            direct_fn
 ; CHECK-NEXT:       - Index:           3
-; CHECK-NEXT:         Name:            call_bar
+; CHECK-NEXT:         Name:            call_direct
+; CHECK-NEXT:       - Index:           4
+; CHECK-NEXT:         Name:            call_alias
+; CHECK-NEXT:       - Index:           5
+; CHECK-NEXT:         Name:            call_alias_ptr
+; CHECK-NEXT:       - Index:           6
+; CHECK-NEXT:         Name:            call_direct_ptr
 ; CHECK-NEXT: ...

Modified: lld/trunk/test/wasm/weak-alias.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/weak-alias.ll?rev=321241&r1=321240&r2=321241&view=diff
==============================================================================
--- lld/trunk/test/wasm/weak-alias.ll (original)
+++ lld/trunk/test/wasm/weak-alias.ll Wed Dec 20 18:30:09 2017
@@ -3,14 +3,14 @@
 ; RUN: lld -flavor wasm %t.o %t2.o -o %t.wasm
 ; RUN: obj2yaml %t.wasm | FileCheck %s
 
-; Test that weak aliases (bar is a weak alias of foo) are linked correctly
+; Test that weak aliases (alias_fn is a weak alias of direct_fn) are linked correctly
 
-declare i32 @bar() local_unnamed_addr #1
+declare i32 @alias_fn() local_unnamed_addr #1
 
 ; Function Attrs: nounwind uwtable
 define i32 @_start() local_unnamed_addr #1 {
 entry:
-  %call = tail call i32 @bar() #2
+  %call = tail call i32 @alias_fn() #2
   ret i32 %call
 }
 
@@ -24,14 +24,14 @@ entry:
 ; CHECK-NEXT:         ReturnType:      I32
 ; CHECK-NEXT:         ParamTypes:
 ; CHECK-NEXT:   - Type:            FUNCTION
-; CHECK-NEXT:     FunctionTypes:   [ 0, 0, 0 ]
+; CHECK-NEXT:     FunctionTypes:   [ 0, 0, 0, 0, 0, 0 ]
 ; CHECK-NEXT:   - Type:            TABLE
 ; CHECK-NEXT:     Tables:
 ; CHECK-NEXT:       - ElemType:        ANYFUNC
 ; CHECK-NEXT:         Limits:
 ; CHECK-NEXT:           Flags:           [ HAS_MAX ]
-; CHECK-NEXT:           Initial:         0x00000001
-; CHECK-NEXT:           Maximum:         0x00000001
+; CHECK-NEXT:           Initial:         0x00000002
+; CHECK-NEXT:           Maximum:         0x00000002
 ; CHECK-NEXT:   - Type:            MEMORY
 ; CHECK-NEXT:     Memories:
 ; CHECK-NEXT:       - Initial:         0x00000002
@@ -50,15 +50,30 @@ entry:
 ; CHECK-NEXT:       - Name:            _start
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           0
-; CHECK-NEXT:       - Name:            bar
+; CHECK-NEXT:       - Name:            alias_fn
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           1
-; CHECK-NEXT:       - Name:            foo
+; CHECK-NEXT:       - Name:            direct_fn
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           1
-; CHECK-NEXT:       - Name:            call_bar
+; CHECK-NEXT:       - Name:            call_direct
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           2
+; CHECK-NEXT:       - Name:            call_alias
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           3
+; CHECK-NEXT:       - Name:            call_alias_ptr
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           4
+; CHECK-NEXT:       - Name:            call_direct_ptr
+; CHECK-NEXT:         Kind:            FUNCTION
+; CHECK-NEXT:         Index:           5
+; CHECK-NEXT:   - Type:            ELEM
+; CHECK-NEXT:     Segments:        
+; CHECK-NEXT:       - Offset:          
+; CHECK-NEXT:           Opcode:          I32_CONST
+; CHECK-NEXT:           Value:           1
+; CHECK-NEXT:         Functions:       [ 1 ]
 ; CHECK-NEXT:   - Type:            CODE
 ; CHECK-NEXT:     Functions:
 ; CHECK-NEXT:       - Locals:
@@ -67,6 +82,14 @@ entry:
 ; CHECK-NEXT:         Body:            41000B
 ; CHECK-NEXT:       - Locals:
 ; CHECK-NEXT:         Body:            1081808080000B
+; CHECK-NEXT:       - Locals:
+; CHECK-NEXT:         Body:            1081808080000B
+; CHECK-NEXT:       - Locals:          
+; CHECK-NEXT:         Body:            41010B
+; CHECK-NEXT:       - Locals:          
+; CHECK-NEXT:           - Type:            I32
+; CHECK-NEXT:             Count:           2
+; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B
 ; CHECK-NEXT:   - Type:            CUSTOM
 ; CHECK-NEXT:     Name:            linking
 ; CHECK-NEXT:     DataSize:        0
@@ -76,7 +99,13 @@ entry:
 ; CHECK-NEXT:       - Index:           0
 ; CHECK-NEXT:         Name:            _start
 ; CHECK-NEXT:       - Index:           1
-; CHECK-NEXT:         Name:            foo
+; CHECK-NEXT:         Name:            direct_fn
 ; CHECK-NEXT:       - Index:           2
-; CHECK-NEXT:         Name:            call_bar
+; CHECK-NEXT:         Name:            call_direct
+; CHECK-NEXT:       - Index:           3
+; CHECK-NEXT:         Name:            call_alias
+; CHECK-NEXT:       - Index:           4
+; CHECK-NEXT:         Name:            call_alias_ptr
+; CHECK-NEXT:       - Index:           5
+; CHECK-NEXT:         Name:            call_direct_ptr
 ; CHECK-NEXT: ...




More information about the llvm-commits mailing list