From: Lang Hames Date: Fri, 12 May 2023 00:41:30 +0000 (+1000) Subject: [lli] Add new testcases for lli. X-Git-Tag: upstream/17.0.6~8731 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=563ce9aa4ab22f10e0aa2799a3562a65a629ad0a;p=platform%2Fupstream%2Fllvm.git [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. --- 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 0000000..eb5bdac --- /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 + +@A = internal global i8 1, align 1 +@B = global i64 1, align 8 +@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 0000000..57e00a1 --- /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 0000000..c472ae0 --- /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 0000000..f609636 --- /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 + +@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 0000000..a18b106 --- /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 + +@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 0000000..7cdb484 --- /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 + +@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 0000000..1ddefa4 --- /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 +}