diff --git a/lib/Transforms/Scalar/Float2Int.cpp b/lib/Transforms/Scalar/Float2Int.cpp index 3d7457ea5dc..33bc8603039 100644 --- a/lib/Transforms/Scalar/Float2Int.cpp +++ b/lib/Transforms/Scalar/Float2Int.cpp @@ -511,6 +511,9 @@ void Float2Int::cleanup() { } bool Float2Int::runOnFunction(Function &F) { + if (skipOptnoneFunction(F)) + return false; + DEBUG(dbgs() << "F2I: Looking at function " << F.getName() << "\n"); // Clear out all state. ECs = EquivalenceClasses(); diff --git a/test/Transforms/Float2Int/float2int-optnone.ll b/test/Transforms/Float2Int/float2int-optnone.ll new file mode 100644 index 00000000000..c1eeea7a82e --- /dev/null +++ b/test/Transforms/Float2Int/float2int-optnone.ll @@ -0,0 +1,17 @@ +; RUN: opt < %s -float2int -S | FileCheck %s +; +; Verify that pass float2int is not run on optnone functions. + +define i16 @simple1(i8 %a) #0 { +; CHECK-LABEL: @simple1 +; CHECK: %1 = uitofp i8 %a to float +; CHECK-NEXT: %2 = fadd float %1, 1.0 +; CHECK-NEXT: %3 = fptoui float %2 to i16 +; CHECK-NEXT: ret i16 %3 + %1 = uitofp i8 %a to float + %2 = fadd float %1, 1.0 + %3 = fptoui float %2 to i16 + ret i16 %3 +} + +attributes #0 = { noinline optnone }