From 04f9128beb3c7e5345e81aa2b7045be43c1467d3 Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Fri, 7 Nov 2025 15:16:57 +0000 Subject: [PATCH 1/6] Add regression bitcode test for SAP usecase --- Bitcode/Regression/CMakeLists.txt | 3 + .../sap_fct_splitting/CMakeLists.txt | 13 ++ .../Regression/sap_fct_splitting/README.md | 29 +++ Bitcode/Regression/sap_fct_splitting/mocks.c | 24 +++ .../sap_fct_splitting/sap_fct_splitting.bc | Bin 0 -> 3800 bytes .../sap_fct_splitting/sap_fct_splitting.ll | 195 ++++++++++++++++++ 6 files changed, 264 insertions(+) create mode 100644 Bitcode/Regression/sap_fct_splitting/CMakeLists.txt create mode 100644 Bitcode/Regression/sap_fct_splitting/README.md create mode 100644 Bitcode/Regression/sap_fct_splitting/mocks.c create mode 100644 Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.bc create mode 100644 Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.ll diff --git a/Bitcode/Regression/CMakeLists.txt b/Bitcode/Regression/CMakeLists.txt index d37f61ee34..9ffbd5f4b9 100644 --- a/Bitcode/Regression/CMakeLists.txt +++ b/Bitcode/Regression/CMakeLists.txt @@ -9,4 +9,7 @@ if(ARCH STREQUAL "x86") NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0") add_subdirectory(fft) endif() + + # Proprietary e2e regression tests for SAP + add_subdirectory(sap_fct_splitting) endif() diff --git a/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt b/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt new file mode 100644 index 0000000000..0d9cfda26b --- /dev/null +++ b/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt @@ -0,0 +1,13 @@ +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/sap_fct_splitting.bc PROPERTIES LANGUAGE C) +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/mocks.c PROPERTIES LANGUAGE C) + +find_package(Threads) +list(APPEND LDFLAGS ${CMAKE_THREAD_LIBS_INIT}) +foreach(lib ${CMAKE_DL_LIBS}) + list(APPEND LDFLAGS -l${lib}) +endforeach() + +llvm_multisource(sap_fct_splitting + ${CMAKE_CURRENT_SOURCE_DIR}/sap_fct_splitting.bc + ${CMAKE_CURRENT_SOURCE_DIR}/mocks.c +) diff --git a/Bitcode/Regression/sap_fct_splitting/README.md b/Bitcode/Regression/sap_fct_splitting/README.md new file mode 100644 index 0000000000..581a8e7b52 --- /dev/null +++ b/Bitcode/Regression/sap_fct_splitting/README.md @@ -0,0 +1,29 @@ +# Regenerate bitcode file + +This bitcode test was generated from this high level program: + +``` +Int32 main() { + Bool x; + Int32 counter = test::produce(5); + while (counter < 10) { + counter++; +// Creation of subfunction forced here - start + if (counter >= 8) { + break; // triggers indirectbr + } else if (counter >= 4) { + continue; // triggers indirectbr + } +// Creation of subfunction forced here - end + test::consume(counter); + } + return 1; +} + +``` + +convert IR to bitcode using this command: + +```sh +llvm-as -o +``` diff --git a/Bitcode/Regression/sap_fct_splitting/mocks.c b/Bitcode/Regression/sap_fct_splitting/mocks.c new file mode 100644 index 0000000000..2b784a435f --- /dev/null +++ b/Bitcode/Regression/sap_fct_splitting/mocks.c @@ -0,0 +1,24 @@ +typedef unsigned long long uint64_t; +typedef long long int64_t; +typedef unsigned int uint32_t; +typedef char* opaque_ptr; + +// Globals +opaque_ptr _debugInfo = 0; +opaque_ptr _sourceCodeObj = 0; + +// Helper functions +void disrupt_optimizer() {} + +// Mock functions +uint64_t llangStackTracePushVoid(opaque_ptr context, uint32_t lineNumber, uint64_t returnCode, opaque_ptr literal, opaque_ptr debugInfo, opaque_ptr sourceCodeObj) { + return 0; +} + +int64_t llangTestProduce(opaque_ptr obj, int64_t input) { + return input; +} + +int64_t llangTestConsume(opaque_ptr obj, int64_t input) { + return input; +} diff --git a/Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.bc b/Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.bc new file mode 100644 index 0000000000000000000000000000000000000000..88413bdf83c285766e8948e52a518ed46a9e7550 GIT binary patch literal 3800 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 Date: Fri, 7 Nov 2025 15:22:01 +0000 Subject: [PATCH 2/6] Add purpose section to README of test --- Bitcode/Regression/sap_fct_splitting/CMakeLists.txt | 6 ------ Bitcode/Regression/sap_fct_splitting/README.md | 8 +++++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt b/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt index 0d9cfda26b..4bd61b8ad0 100644 --- a/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt +++ b/Bitcode/Regression/sap_fct_splitting/CMakeLists.txt @@ -1,12 +1,6 @@ SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/sap_fct_splitting.bc PROPERTIES LANGUAGE C) SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/mocks.c PROPERTIES LANGUAGE C) -find_package(Threads) -list(APPEND LDFLAGS ${CMAKE_THREAD_LIBS_INIT}) -foreach(lib ${CMAKE_DL_LIBS}) - list(APPEND LDFLAGS -l${lib}) -endforeach() - llvm_multisource(sap_fct_splitting ${CMAKE_CURRENT_SOURCE_DIR}/sap_fct_splitting.bc ${CMAKE_CURRENT_SOURCE_DIR}/mocks.c diff --git a/Bitcode/Regression/sap_fct_splitting/README.md b/Bitcode/Regression/sap_fct_splitting/README.md index 581a8e7b52..ce16e0d193 100644 --- a/Bitcode/Regression/sap_fct_splitting/README.md +++ b/Bitcode/Regression/sap_fct_splitting/README.md @@ -1,5 +1,11 @@ -# Regenerate bitcode file +# SAP function splitting regression test +## Purpose +This tests the correct compilation of `indirectbr` and `blockaddr`, that led to issues downstream, due to a not +yet fixed issue, which was reported here: +https://github.com/llvm/llvm-project/issues/161164 + +## Regenerate bitcode file This bitcode test was generated from this high level program: ``` From 4c7d2a5be749e1674a441e4795261eb93d1e80da Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Mon, 10 Nov 2025 10:32:38 +0000 Subject: [PATCH 3/6] Apply feedback --- Bitcode/Regression/CMakeLists.txt | 2 +- Bitcode/Regression/sap_fct_splitting/mocks.c | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Bitcode/Regression/CMakeLists.txt b/Bitcode/Regression/CMakeLists.txt index 9ffbd5f4b9..e4303b926e 100644 --- a/Bitcode/Regression/CMakeLists.txt +++ b/Bitcode/Regression/CMakeLists.txt @@ -10,6 +10,6 @@ if(ARCH STREQUAL "x86") add_subdirectory(fft) endif() - # Proprietary e2e regression tests for SAP + # E2E regression tests from SAP add_subdirectory(sap_fct_splitting) endif() diff --git a/Bitcode/Regression/sap_fct_splitting/mocks.c b/Bitcode/Regression/sap_fct_splitting/mocks.c index 2b784a435f..79f2515d02 100644 --- a/Bitcode/Regression/sap_fct_splitting/mocks.c +++ b/Bitcode/Regression/sap_fct_splitting/mocks.c @@ -1,15 +1,11 @@ -typedef unsigned long long uint64_t; -typedef long long int64_t; -typedef unsigned int uint32_t; +#include + typedef char* opaque_ptr; // Globals opaque_ptr _debugInfo = 0; opaque_ptr _sourceCodeObj = 0; -// Helper functions -void disrupt_optimizer() {} - // Mock functions uint64_t llangStackTracePushVoid(opaque_ptr context, uint32_t lineNumber, uint64_t returnCode, opaque_ptr literal, opaque_ptr debugInfo, opaque_ptr sourceCodeObj) { return 0; From 6d1606aef5fd637fefc6b24bd476b01be84708e7 Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Mon, 10 Nov 2025 10:36:56 +0000 Subject: [PATCH 4/6] Delete ll file --- .../sap_fct_splitting/sap_fct_splitting.ll | 195 ------------------ 1 file changed, 195 deletions(-) delete mode 100644 Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.ll diff --git a/Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.ll b/Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.ll deleted file mode 100644 index 3e673d8921..0000000000 --- a/Bitcode/Regression/sap_fct_splitting/sap_fct_splitting.ll +++ /dev/null @@ -1,195 +0,0 @@ -; ModuleID = 'L' -source_filename = "L" - -@literal = private constant [5 x i8] c"main\00", align 1 -@_debugInfo = external global i8 -@_sourceCodeObj = external global i8 -@literal.1 = private constant [24 x i8] c"_sub_split_main__split0\00", align 1 - -; Function Attrs: noinline nounwind optnone sspreq willreturn -define i64 @_sub_split_main__split0(ptr %_context, ptr noalias %counter, ptr %jumpAddr) #0 { -_sub_split_main__split0_entry: - %RC = alloca i64, align 8 - %RCLineNumber_l6 = alloca i32, align 4 - %Result_l9_c15 = alloca i8, align 1 - %Result_l7_c8 = alloca i8, align 1 - br label %_sub_split_main__split0_first - -_sub_split_main__split0_first: ; preds = %_sub_split_main__split0_entry - store i64 0, ptr %RC, align 8 - store i32 0, ptr %RCLineNumber_l6, align 4 - %value_l7_c8 = load i32, ptr %counter, align 4 - %result2.i = icmp sge i32 %value_l7_c8, 8 - %0 = zext i1 %result2.i to i8 - store i8 %0, ptr %Result_l7_c8, align 1 - %_l7_c8 = load i8, ptr %Result_l7_c8, align 1 - %1 = icmp ne i8 %_l7_c8, 0 - br i1 %1, label %l7_if_then, label %l7_if_else - -l4_chain_unwind: ; No predecessors! - %RC1 = phi i64 - %RCLineNumber = phi i32 - store i64 %RC1, ptr %RC, align 8 - store i32 %RCLineNumber, ptr %RCLineNumber_l6, align 4 - br label %_sub_split_main__split0_rcc_unwind_top - -l7_if_then: ; preds = %_sub_split_main__split0_first - store ptr blockaddress(@main, %loopCtrlExit), ptr %jumpAddr, align 8 - br label %_sub_split_main__split0_return - -l7_if_else: ; preds = %_sub_split_main__split0_first - %value_l9_c15 = load i32, ptr %counter, align 4 - %result2.i3 = icmp sge i32 %value_l9_c15, 4 - %2 = zext i1 %result2.i3 to i8 - store i8 %2, ptr %Result_l9_c15, align 1 - %_l9_c15 = load i8, ptr %Result_l9_c15, align 1 - %3 = icmp ne i8 %_l9_c15, 0 - br i1 %3, label %l9_if_then, label %l9_if_exit - -l9_if_then: ; preds = %l7_if_else - store ptr blockaddress(@main, %loopCtrlExit3), ptr %jumpAddr, align 8 - br label %_sub_split_main__split0_return - -l9_if_exit: ; preds = %l7_if_else - br label %l7_if_exit - -l7_if_exit: ; preds = %l9_if_exit - br label %_sub_split_main__split0_return - -_sub_split_main__split0_return: ; preds = %l7_if_exit, %l9_if_then, %l7_if_then, %_sub_split_main__split0_rcc_unwind_top - %RCValue = load i64, ptr %RC, align 8 - ret i64 %RCValue - -_sub_split_main__split0_rcc_unwind_top: ; preds = %l4_chain_unwind - %RCLineNumber_l62 = load i32, ptr %RCLineNumber_l6, align 4 - %RC_l6_i1 = load i64, ptr %RC, align 8 - %rc_l6_i2 = call i64 @llangStackTracePushVoid(ptr %_context, i32 %RCLineNumber_l62, i64 %RC_l6_i1, ptr @literal.1, ptr @_debugInfo, ptr @_sourceCodeObj) - br label %_sub_split_main__split0_return -} - -; Function Attrs: noinline nounwind optnone sspreq willreturn -define i64 @main() #0 { -main_entry: - %Result = alloca i64, align 8 - %_context = alloca i64, align 8 - %RC.i = alloca i64, align 8 - %RC = alloca i64, align 8 - %RCLineNumber_l1 = alloca i32, align 4 - %x_l2 = alloca i8, align 1 - %counter_l3 = alloca i32, align 4 - %tmpSmallValue_l3_c18 = alloca i64, align 8 - %jmpAddr_l6 = alloca ptr, align 8 - %Result_l4_c9 = alloca i8, align 1 - br label %main_first - -main_first: ; preds = %main_entry - store i64 0, ptr %RC, align 8 - store i32 0, ptr %RCLineNumber_l1, align 4 - store i8 0, ptr %x_l2, align 1 - %rc_l3 = call i64 @llangTestProduce(ptr %tmpSmallValue_l3_c18, i64 5) - %asInt64 = load i64, ptr %tmpSmallValue_l3_c18, align 8 - %asIntN = trunc i64 %asInt64 to i32 - store i32 %asIntN, ptr %counter_l3, align 4 - br label %l4_while_head - -l0_chain_unwind: ; preds = %l5_rcc_ok, %l4_while_body - %RC1 = phi i64 [ %RCValue.i, %l4_while_body ], [ %rc_l6_i3, %l5_rcc_ok ] - %RCLineNumber = phi i32 [ 5, %l4_while_body ], [ 6, %l5_rcc_ok ] - store i64 %RC1, ptr %RC, align 8 - store i32 %RCLineNumber, ptr %RCLineNumber_l1, align 4 - br label %main_rcc_unwind_top - -l4_while_body: ; preds = %l4_while_head - call void @llvm.lifetime.start.p0(i64 8, ptr %RC.i) - store i64 0, ptr %RC.i, align 8 - %thiss_value.i = load i32, ptr %counter_l3, align 4 - %0 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %thiss_value.i, i32 1) - %value.i = extractvalue { i32, i1 } %0, 0 - %errorBit.i = extractvalue { i32, i1 } %0, 1 - %extErrBit.i = zext i1 %errorBit.i to i64 - store i64 %extErrBit.i, ptr %RC.i, align 8 - store i32 %value.i, ptr %counter_l3, align 4 - %RCValue.i = load i64, ptr %RC.i, align 8 - call void @llvm.lifetime.end.p0(i64 8, ptr %RC.i) - %rcCmp_l5_i1 = icmp ne i64 %RCValue.i, 0 - br i1 %rcCmp_l5_i1, label %l0_chain_unwind, label %l5_rcc_ok, !prof !0 - -l5_rcc_ok: ; preds = %l4_while_body - store ptr blockaddress(@main, %l6_regularExit), ptr %jmpAddr_l6, align 8 - %rc_l6_i3 = call i64 @_sub_split_main__split0(ptr %_context, ptr %counter_l3, ptr %jmpAddr_l6) - %rcCmp_l6_i4 = icmp ne i64 %rc_l6_i3, 0 - br i1 %rcCmp_l6_i4, label %l0_chain_unwind, label %l6_rcc_ok, !prof !0 - -loopCtrlExit: ; preds = %l6_rcc_ok - br label %l4_while_exit_ok - -loopCtrlExit3: ; preds = %l6_rcc_ok - br label %l4_while_head - -l6_regularExit: ; preds = %l6_rcc_ok - %value_l13_c18 = load i32, ptr %counter_l3, align 4 - %asInt644 = zext i32 %value_l13_c18 to i64 - %rc_l13 = call i64 @llangTestConsume(i64 %asInt644) - br label %l4_while_head - -l6_rcc_ok: ; preds = %l5_rcc_ok - %jumpAddrLoaded = load ptr, ptr %jmpAddr_l6, align 8 - indirectbr ptr %jumpAddrLoaded, [label %l6_regularExit, label %loopCtrlExit, label %loopCtrlExit3] - -l4_while_head: ; preds = %l6_regularExit, %loopCtrlExit3, %main_first - %value_l4_c9 = load i32, ptr %counter_l3, align 4 - %result2.i = icmp slt i32 %value_l4_c9, 10 - %1 = zext i1 %result2.i to i8 - store i8 %1, ptr %Result_l4_c9, align 1 - %_l4_c9 = load i8, ptr %Result_l4_c9, align 1 - %2 = icmp ne i8 %_l4_c9, 0 - br i1 %2, label %l4_while_body, label %l4_while_exit_ok - -l4_while_exit_ok: ; preds = %l4_while_head, %loopCtrlExit - store i32 1, ptr %Result, align 4 - br label %main_return - -main_return: ; preds = %l4_while_exit_ok, %main_rcc_unwind_top - %RCValue = load i64, ptr %RC, align 8 - ret i64 %RCValue - -main_rcc_unwind_top: ; preds = %l0_chain_unwind - %RCLineNumber_l12 = load i32, ptr %RCLineNumber_l1, align 4 - %RC_l1_i1 = load i64, ptr %RC, align 8 - %rc_l1_i2 = call i64 @llangStackTracePushVoid(ptr %_context, i32 %RCLineNumber_l12, i64 %RC_l1_i1, ptr @literal, ptr @_debugInfo, ptr @_sourceCodeObj) - br label %main_return -} - -; Function Attrs: nounwind sspreq willreturn -declare i64 @llangStackTracePushVoid(ptr, i32 signext, i64 signext, ptr, ptr, ptr) #1 - -; Function Attrs: nounwind sspreq willreturn -declare i64 @llangTestProduce(ptr, i64) #1 - -; Function Attrs: nounwind sspreq willreturn -declare i64 @"Int32~_operator_inc~Void"(ptr) #1 - -; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) -declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) #2 - -; Function Attrs: nounwind sspreq willreturn -declare i64 @"Int32~_operator_ge~Int32~Bool"(ptr, i32 signext, i32 signext) #1 - -; Function Attrs: nounwind sspreq willreturn -declare i64 @llangTestConsume(i64) #1 - -; Function Attrs: nounwind sspreq willreturn -declare i64 @"Int32~_operator_lt~Int32~Bool"(ptr, i32 signext, i32 signext) #1 - -; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -declare void @llvm.lifetime.start.p0(i64 immarg, ptr captures(none)) #3 - -; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none)) #3 - -attributes #0 = { noinline nounwind optnone sspreq willreturn "frame-pointer"="all" } -attributes #1 = { nounwind sspreq willreturn "frame-pointer"="all" } -attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } -attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } - -!0 = !{!"branch_weights", i32 4, i32 64} From 4564cf088fc6b160a7ba6ec8deb6321c5cfce3fb Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Tue, 11 Nov 2025 10:14:09 +0000 Subject: [PATCH 5/6] Rephase purpose --- Bitcode/Regression/sap_fct_splitting/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Bitcode/Regression/sap_fct_splitting/README.md b/Bitcode/Regression/sap_fct_splitting/README.md index ce16e0d193..7fe49d9e0d 100644 --- a/Bitcode/Regression/sap_fct_splitting/README.md +++ b/Bitcode/Regression/sap_fct_splitting/README.md @@ -1,9 +1,7 @@ # SAP function splitting regression test ## Purpose -This tests the correct compilation of `indirectbr` and `blockaddr`, that led to issues downstream, due to a not -yet fixed issue, which was reported here: -https://github.com/llvm/llvm-project/issues/161164 +This tests the correct compilation of `indirectbr` and `blockaddr` in combination with custom cost-based function outlining. ## Regenerate bitcode file This bitcode test was generated from this high level program: From a7355107450ecfc23b88fc6e79b70cb8c15537d0 Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Fri, 14 Nov 2025 10:53:25 +0000 Subject: [PATCH 6/6] Remove llvm-as section in README --- Bitcode/Regression/sap_fct_splitting/README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Bitcode/Regression/sap_fct_splitting/README.md b/Bitcode/Regression/sap_fct_splitting/README.md index 7fe49d9e0d..090cdc2342 100644 --- a/Bitcode/Regression/sap_fct_splitting/README.md +++ b/Bitcode/Regression/sap_fct_splitting/README.md @@ -3,7 +3,7 @@ ## Purpose This tests the correct compilation of `indirectbr` and `blockaddr` in combination with custom cost-based function outlining. -## Regenerate bitcode file +## Produce bitcode file This bitcode test was generated from this high level program: ``` @@ -25,9 +25,3 @@ Int32 main() { } ``` - -convert IR to bitcode using this command: - -```sh -llvm-as -o -```