From 84af05e1ba3a97d98b76929df858edc7b8b0d252 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Thu, 29 Nov 2012 14:25:47 +0000 Subject: [msan] Propagate shadow through (x<0) and (x>=0) comparisons. This is a special case of signed relational comparison where result only depends on the sign of x. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168881 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Instrumentation/MemorySanitizer/msan_basic.ll | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'test/Instrumentation') diff --git a/test/Instrumentation/MemorySanitizer/msan_basic.ll b/test/Instrumentation/MemorySanitizer/msan_basic.ll index 2346d75f8e..8d729d6d41 100644 --- a/test/Instrumentation/MemorySanitizer/msan_basic.ll +++ b/test/Instrumentation/MemorySanitizer/msan_basic.ll @@ -235,6 +235,53 @@ entry: ; CHECK: } +; Check that we propagate shadow for x<0, x>=0, etc (i.e. sign bit tests) + +define zeroext i1 @ICmpSLT(i32 %x) nounwind uwtable readnone { + %1 = icmp slt i32 %x, 0 + ret i1 %1 +} + +; CHECK: define zeroext i1 @ICmpSLT +; CHECK: icmp slt +; CHECK: icmp slt +; CHECK-NOT: br +; CHECK: } + +define zeroext i1 @ICmpSGE(i32 %x) nounwind uwtable readnone { + %1 = icmp sge i32 %x, 0 + ret i1 %1 +} + +; CHECK: define zeroext i1 @ICmpSGE +; CHECK: icmp slt +; CHECK: icmp sge +; CHECK-NOT: br +; CHECK: } + +define zeroext i1 @ICmpSGT(i32 %x) nounwind uwtable readnone { + %1 = icmp sgt i32 0, %x + ret i1 %1 +} + +; CHECK: define zeroext i1 @ICmpSGT +; CHECK: icmp slt +; CHECK: icmp sgt +; CHECK-NOT: br +; CHECK: } + +define zeroext i1 @ICmpSLE(i32 %x) nounwind uwtable readnone { + %1 = icmp sle i32 0, %x + ret i1 %1 +} + +; CHECK: define zeroext i1 @ICmpSLE +; CHECK: icmp slt +; CHECK: icmp sle +; CHECK-NOT: br +; CHECK: } + + ; Check that loads from shadow have the same aligment as the original loads. define i32 @ShadowLoadAlignmentLarge() nounwind uwtable { -- cgit v1.2.3