[llvm] 563ce9a - [lli] Add new testcases for lli.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Thu May 11 22:40:12 PDT 2023


Author: Lang Hames
Date: 2023-05-12T15:40:04+10:00
New Revision: 563ce9aa4ab22f10e0aa2799a3562a65a629ad0a

URL: https://github.com/llvm/llvm-project/commit/563ce9aa4ab22f10e0aa2799a3562a65a629ad0a
DIFF: https://github.com/llvm/llvm-project/commit/563ce9aa4ab22f10e0aa2799a3562a65a629ad0a.diff

LOG: [lli] Add new testcases for lli.

These are an attempt to more systematically test the features covered by the
MCJIT regression tests (though these tests apply to lli's default mode, which
is now -jit-kind=orc).

This first batch of tests includes a basic smoke test (trivial-return-zero),
tests for single function calls and data references, and alignment handling.

Added: 
    llvm/test/ExecutionEngine/Orc/global-variable-alignment.ll
    llvm/test/ExecutionEngine/Orc/trivial-call-to-function.ll
    llvm/test/ExecutionEngine/Orc/trivial-call-to-internal-function.ll
    llvm/test/ExecutionEngine/Orc/trivial-reference-to-global-variable.ll
    llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-nonzeroinit.ll
    llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-zeroinit.ll
    llvm/test/ExecutionEngine/Orc/trivial-return-zero.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/ExecutionEngine/Orc/global-variable-alignment.ll b/llvm/test/ExecutionEngine/Orc/global-variable-alignment.ll
new file mode 100644
index 0000000000000..eb5bdac0d94f4
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/global-variable-alignment.ll
@@ -0,0 +1,27 @@
+; Check that lli respects alignment on global variables.
+;
+; Returns ((uint32_t)&B & 0x7) - A + C. Variables A and C have byte-alignment,
+; and are intended to increase the chance of misalignment, but don't contribute
+; to the result, since they have the same initial value.
+;
+; A failure may indicate a problem with alignment handling in the JIT linker or
+; JIT memory manager.
+;
+; RUN: %lli %s
+
+ at A = internal global i8 1, align 1
+ at B = global i64 1, align 8
+ at C = internal global i8 1, align 1
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = ptrtoint i8* @B to i32
+  %1 = and i32 %0, 7
+  %2 = load i8, i8* @A
+  %3 = zext i8 %2 to i32
+  %4 = add i32 %1, %3
+  %5 = load i8, i8* @B
+  %6 = zext i8 %5 to i32
+  %7 = sub i32 %4, %6
+  ret i32 %7
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-call-to-function.ll b/llvm/test/ExecutionEngine/Orc/trivial-call-to-function.ll
new file mode 100644
index 0000000000000..57e00a10ad4b6
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-call-to-function.ll
@@ -0,0 +1,17 @@
+; Check that we can execute a program that makes a single call to an external
+; linkage function that returns zero.
+;
+; Failure may indicate a problem with branch, GOT, or PLT relocation handling
+; in the JIT linker.
+;
+; RUN: %lli %s
+
+define i32 @foo() {
+  ret i32 0
+}
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = call i32 @foo()
+  ret i32 %0
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-call-to-internal-function.ll b/llvm/test/ExecutionEngine/Orc/trivial-call-to-internal-function.ll
new file mode 100644
index 0000000000000..c472ae0f038ad
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-call-to-internal-function.ll
@@ -0,0 +1,17 @@
+; Check that we can execute a program that makes a single call to an internal
+; linkage function that returns zero.
+;
+; Failure may indicate a problem with branch relocation handling in the JIT
+; linker.
+;
+; RUN: %lli %s
+
+define internal i32 @foo() {
+  ret i32 0
+}
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = call i32 @foo()
+  ret i32 %0
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-reference-to-global-variable.ll b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-global-variable.ll
new file mode 100644
index 0000000000000..f6096367b2dfa
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-global-variable.ll
@@ -0,0 +1,16 @@
+; Check that we can execute a program that makes a single reference to an
+; external linkage global variable that is initialized to a non-zero value.
+;
+; Failure may indicate a problem with data-section or GOT handling.
+;
+; RUN: %lli %s
+
+ at X = global i32 1
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = load i32, i32* @X
+  %1 = icmp ne i32 %0, 1
+  %2 = zext i1 %1 to i32
+  ret i32 %2
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-nonzeroinit.ll b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-nonzeroinit.ll
new file mode 100644
index 0000000000000..a18b1062e11f0
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-nonzeroinit.ll
@@ -0,0 +1,16 @@
+; Check that we can execute a program that makes a single reference to an
+; internal linkage global variable that is initialized to a non-zero value.
+;
+; Failure may indicate a problem with data-section handling.
+;
+; RUN: %lli %s
+
+ at X = internal global i32 1
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = load i32, i32* @X
+  %1 = icmp ne i32 %0, 1
+  %2 = zext i1 %1 to i32
+  ret i32 %2
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-zeroinit.ll b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-zeroinit.ll
new file mode 100644
index 0000000000000..7cdb484cd7d8f
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-reference-to-internal-variable-zeroinit.ll
@@ -0,0 +1,15 @@
+; Check that we can execute a program that makes a single reference to an
+; internal linkage global variable that is zero-initialized.
+;
+; Failure may indicate a problem with zero-initialized sections, or data
+; sections more generally.
+;
+; RUN: %lli %s
+
+ at X = internal global i32 0
+
+define i32 @main(i32 %argc, i8** %argv) {
+entry:
+  %0 = load i32, i32* @X
+  ret i32 %0
+}

diff  --git a/llvm/test/ExecutionEngine/Orc/trivial-return-zero.ll b/llvm/test/ExecutionEngine/Orc/trivial-return-zero.ll
new file mode 100644
index 0000000000000..1ddefa4a8c671
--- /dev/null
+++ b/llvm/test/ExecutionEngine/Orc/trivial-return-zero.ll
@@ -0,0 +1,11 @@
+; Check that we can execute a program that does nothing and just returns zero.
+;
+; This is the simplest possible JIT smoke test. If it fails it indicates a
+; critical failure in the JIT (e.g. failure to set memory permissions) that's
+; likely to affect all programs.
+;
+; RUN: %lli %s
+
+define i32 @main(i32 %argc, i8** %argv)  {
+  ret i32 0
+}


        


More information about the llvm-commits mailing list