xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/sqrt-nofast.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Check that we skip transformations if the attribute unsafe-fp-math
2*9880d681SAndroid Build Coastguard Worker; is not set.
3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine float @mysqrt(float %x, float %y) #0 {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %x.addr = alloca float, align 4
8*9880d681SAndroid Build Coastguard Worker  %y.addr = alloca float, align 4
9*9880d681SAndroid Build Coastguard Worker  store float %x, float* %x.addr, align 4
10*9880d681SAndroid Build Coastguard Worker  store float %y, float* %y.addr, align 4
11*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %x.addr, align 4
12*9880d681SAndroid Build Coastguard Worker  %1 = load float, float* %x.addr, align 4
13*9880d681SAndroid Build Coastguard Worker  %mul = fmul fast float %0, %1
14*9880d681SAndroid Build Coastguard Worker  %2 = call float @llvm.sqrt.f32(float %mul)
15*9880d681SAndroid Build Coastguard Worker  ret float %2
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sqrt.f32(float) #1
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK: define float @mysqrt(float %x, float %y) {
21*9880d681SAndroid Build Coastguard Worker; CHECK: entry:
22*9880d681SAndroid Build Coastguard Worker; CHECK:   %mul = fmul fast float %x, %x
23*9880d681SAndroid Build Coastguard Worker; CHECK:   %0 = call float @llvm.sqrt.f32(float %mul)
24*9880d681SAndroid Build Coastguard Worker; CHECK:   ret float %0
25*9880d681SAndroid Build Coastguard Worker; CHECK: }
26