From f70661c84344a12c647afc91da03fef252ae43f2 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 12 Jan 2016 16:50:17 +0000 Subject: [PATCH] Add/edit tests to include instruction-level FMF on calls Prepatory patch before changing LibCallSimplifier to use the FMF. Also, tighten the CHECK lines and give the tests more meaningful names. Similar changes to: http://reviews.llvm.org/rL257414 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257481 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/pow-exp.ll | 44 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/test/Transforms/InstCombine/pow-exp.ll b/test/Transforms/InstCombine/pow-exp.ll index acc512734ec..7e36eadb402 100644 --- a/test/Transforms/InstCombine/pow-exp.ll +++ b/test/Transforms/InstCombine/pow-exp.ll @@ -1,28 +1,40 @@ ; RUN: opt < %s -instcombine -S | FileCheck %s -define double @mypow(double %x, double %y) #0 { -entry: +define double @pow_exp(double %x, double %y) #0 { + %call = call fast double @exp(double %x) #0 + %pow = call fast double @llvm.pow.f64(double %call, double %y) + ret double %pow +} + +; CHECK-LABEL: define double @pow_exp( +; CHECK-NEXT: %mul = fmul fast double %x, %y +; CHECK-NEXT: %exp = call fast double @exp(double %mul) +; CHECK-NEXT: ret double %exp + +; FIXME: This should not be transformed because the 'exp' call is not fast. +define double @pow_exp_not_fast(double %x, double %y) #0 { %call = call double @exp(double %x) - %pow = call double @llvm.pow.f64(double %call, double %y) + %pow = call fast double @llvm.pow.f64(double %call, double %y) ret double %pow } -; CHECK-LABEL: define double @mypow( -; CHECK: %mul = fmul fast double %x, %y -; CHECK: %exp = call fast double @exp(double %mul) #0 -; CHECK: ret double %exp -; CHECK: } +; CHECK-LABEL: define double @pow_exp_not_fast( +; CHECK-NEXT: %call = call double @exp(double %x) +; CHECK-NEXT: %mul = fmul fast double %x, %y +; CHECK-NEXT: %exp = call fast double @exp(double %mul) +; CHECK-NEXT: ret double %exp -define double @test2(double ()* %fptr, double %p1) #0 { - %call1 = call double %fptr() - %pow = call double @llvm.pow.f64(double %call1, double %p1) +define double @function_pointer(double ()* %fptr, double %p1) #0 { + %call1 = call fast double %fptr() + %pow = call fast double @llvm.pow.f64(double %call1, double %p1) ret double %pow } -; CHECK-LABEL: @test2 -; CHECK: llvm.pow.f64 +; CHECK-LABEL: @function_pointer +; CHECK-NEXT: %call1 = call fast double %fptr() +; CHECK-NEXT: %pow = call fast double @llvm.pow.f64(double %call1, double %p1) -declare double @exp(double) #1 +declare double @exp(double) declare double @llvm.pow.f64(double, double) -attributes #0 = { "unsafe-fp-math"="true" } -attributes #1 = { "unsafe-fp-math"="true" } +attributes #0 = { "unsafe-fp-math"="true" nounwind readnone } + -- 2.34.1