xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/softfp-fabs-fneg.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=armv7 < %s | FileCheck %s --check-prefix=CHECK-ARM --check-prefix=CHECK
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumbv7 < %s | FileCheck %s --check-prefix=CHECK-THUMB --check-prefix=CHECK
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
5*9880d681SAndroid Build Coastguard Workertarget triple = "armv7--"
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine double @f(double %a) {
8*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: f:
9*9880d681SAndroid Build Coastguard Worker  ; CHECK: bfc r1, #31, #1
10*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: bx lr
11*9880d681SAndroid Build Coastguard Worker  %x = call double @llvm.fabs.f64(double %a) readnone
12*9880d681SAndroid Build Coastguard Worker  ret double %x
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdefine float @g(float %a) {
16*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: g:
17*9880d681SAndroid Build Coastguard Worker  ; CHECK-THUMB: bic r0, r0, #-2147483648
18*9880d681SAndroid Build Coastguard Worker  ; CHECK-ARM: bfc r0, #31, #1
19*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: bx lr
20*9880d681SAndroid Build Coastguard Worker  %x = call float @llvm.fabs.f32(float %a) readnone
21*9880d681SAndroid Build Coastguard Worker  ret float %x
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine double @h(double %a) {
25*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: h:
26*9880d681SAndroid Build Coastguard Worker  ; CHECK: eor r1, r1, #-2147483648
27*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: bx lr
28*9880d681SAndroid Build Coastguard Worker  %x = fsub nsz double -0.0, %a
29*9880d681SAndroid Build Coastguard Worker  ret double %x
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine float @i(float %a) {
33*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: i:
34*9880d681SAndroid Build Coastguard Worker  ; CHECK: eor r0, r0, #-2147483648
35*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: bx lr
36*9880d681SAndroid Build Coastguard Worker  %x = fsub nsz float -0.0, %a
37*9880d681SAndroid Build Coastguard Worker  ret float %x
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fabs.f64(double) readnone
41*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fabs.f32(float) readnone
42