From 85a0cbee6ec089261a0e7e8031ce72e160bb7f80 Mon Sep 17 00:00:00 2001 From: Yingwei Zheng Date: Tue, 2 Jan 2024 06:03:27 +0800 Subject: [PATCH 1/2] [FuncAttrs] Add pre-commit tests. NFC. --- llvm/test/Transforms/FunctionAttrs/noundef.ll | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llvm/test/Transforms/FunctionAttrs/noundef.ll b/llvm/test/Transforms/FunctionAttrs/noundef.ll index b357587cc1239..e36064c3abc95 100644 --- a/llvm/test/Transforms/FunctionAttrs/noundef.ll +++ b/llvm/test/Transforms/FunctionAttrs/noundef.ll @@ -143,3 +143,12 @@ define i32 @test_noundef_prop() { %ret = call i32 @test_ret_constant() ret i32 %ret } + +; FIXME: Don't deduce noundef for functions with sanitize_memory. +define i32 @test_ret_constant_msan() sanitize_memory { +; CHECK-LABEL: define noundef i32 @test_ret_constant_msan( +; CHECK-SAME: ) #[[ATTR1:[0-9]+]] { +; CHECK-NEXT: ret i32 0 +; + ret i32 0 +} From d295b472726f37e07a1679f8a7f5787e9ea6ce40 Mon Sep 17 00:00:00 2001 From: Yingwei Zheng Date: Tue, 2 Jan 2024 06:05:11 +0800 Subject: [PATCH 2/2] [FuncAttrs] Don't infer `noundef` for functions with `sanitize_memory` attribute --- llvm/lib/Transforms/IPO/FunctionAttrs.cpp | 6 ++++++ llvm/test/Transforms/FunctionAttrs/noundef.ll | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp index ce083979afc63..7ebf265e17ba1 100644 --- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp @@ -1296,6 +1296,12 @@ static void addNoUndefAttrs(const SCCNodeSet &SCCNodes, if (!F->hasExactDefinition()) return; + // MemorySanitizer assumes that the definition and declaration of a + // function will be consistent. A function with sanitize_memory attribute + // should be skipped from inference. + if (F->hasFnAttribute(Attribute::SanitizeMemory)) + continue; + if (F->getReturnType()->isVoidTy()) continue; diff --git a/llvm/test/Transforms/FunctionAttrs/noundef.ll b/llvm/test/Transforms/FunctionAttrs/noundef.ll index e36064c3abc95..946b562f39553 100644 --- a/llvm/test/Transforms/FunctionAttrs/noundef.ll +++ b/llvm/test/Transforms/FunctionAttrs/noundef.ll @@ -144,9 +144,9 @@ define i32 @test_noundef_prop() { ret i32 %ret } -; FIXME: Don't deduce noundef for functions with sanitize_memory. +; Don't deduce noundef for functions with sanitize_memory. define i32 @test_ret_constant_msan() sanitize_memory { -; CHECK-LABEL: define noundef i32 @test_ret_constant_msan( +; CHECK-LABEL: define i32 @test_ret_constant_msan( ; CHECK-SAME: ) #[[ATTR1:[0-9]+]] { ; CHECK-NEXT: ret i32 0 ;