1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
llvm-mirror/test/Transforms/SimplifyCFG/opt-for-fuzzing.ll
Matt Morehouse 3102888fd3 [SimplifyCFG] Create attribute for fuzzing-specific optimizations.
Summary:
When building with libFuzzer, converting control flow to selects or
obscuring the original operands of CMPs reduces the effectiveness of
libFuzzer's heuristics.

This patch provides an attribute to disable or modify certain optimizations
for optimal fuzzing signal.

Provides a less aggressive alternative to https://reviews.llvm.org/D44057.

Reviewers: vitalybuka, davide, arsenm, hfinkel

Reviewed By: vitalybuka

Subscribers: junbuml, mehdi_amini, wdng, javed.absar, hiraditya, llvm-commits, kcc

Differential Revision: https://reviews.llvm.org/D44232

llvm-svn: 328214
2018-03-22 17:07:51 +00:00

50 lines
1.2 KiB
LLVM

; RUN: opt < %s -simplifycfg -S | FileCheck %s
define i32 @foo(i32 %x) optforfuzzing {
entry:
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
%0 = load i32, i32* %x.addr, align 4
%cmp = icmp sgt i32 %0, 16
br i1 %cmp, label %land.rhs, label %land.end
land.rhs:
%1 = load i32, i32* %x.addr, align 4
%cmp1 = icmp slt i32 %1, 32
br label %land.end
land.end:
%2 = phi i1 [ false, %entry ], [ %cmp1, %land.rhs ]
%conv = zext i1 %2 to i32
ret i32 %conv
; CHECK-LABEL: define i32 @foo(i32 %x)
; CHECK: br i1 %cmp, label %land.rhs, label %land.end
; CHECK-LABEL: land.rhs:
; CHECK: br label %land.end
; CHECK-LABEL: land.end:
; CHECK: phi {{.*}} %entry {{.*}} %land.rhs
}
define i32 @bar(i32 %x) {
entry:
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
%0 = load i32, i32* %x.addr, align 4
%cmp = icmp sgt i32 %0, 16
br i1 %cmp, label %land.rhs, label %land.end
land.rhs:
%1 = load i32, i32* %x.addr, align 4
%cmp1 = icmp slt i32 %1, 32
br label %land.end
land.end:
%2 = phi i1 [ false, %entry ], [ %cmp1, %land.rhs ]
%conv = zext i1 %2 to i32
ret i32 %conv
; CHECK-LABEL: define i32 @bar(i32 %x)
; CHECK-NOT: br
}