mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 14:10:41 +00:00
8b6d60f94b
are operations that do not access memory but may be sensitive to floating-point environment changes. LLVM does not attempt to model FP environment changes, so this was unnecessarily conservative and was getting on the way of some optimizations, in particular SLP vectorization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203037 91177308-0d34-0410-b5e6-96231b3b80d8
74 lines
2.4 KiB
LLVM
74 lines
2.4 KiB
LLVM
; RUN: llvm-as < %s | llvm-dis > %t1.ll
|
|
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
|
|
; RUN: diff %t1.ll %t2.ll
|
|
; RUN: FileCheck %s < %t1.ll
|
|
|
|
declare i1 @llvm.isunordered.f32(float, float)
|
|
|
|
declare i1 @llvm.isunordered.f64(double, double)
|
|
|
|
|
|
declare i8 @llvm.ctpop.i8(i8)
|
|
|
|
declare i16 @llvm.ctpop.i16(i16)
|
|
|
|
declare i32 @llvm.ctpop.i32(i32)
|
|
|
|
declare i64 @llvm.ctpop.i64(i64)
|
|
|
|
declare i8 @llvm.cttz.i8(i8, i1)
|
|
|
|
declare i16 @llvm.cttz.i16(i16, i1)
|
|
|
|
declare i32 @llvm.cttz.i32(i32, i1)
|
|
|
|
declare i64 @llvm.cttz.i64(i64, i1)
|
|
|
|
declare i8 @llvm.ctlz.i8(i8, i1)
|
|
|
|
declare i16 @llvm.ctlz.i16(i16, i1)
|
|
|
|
declare i32 @llvm.ctlz.i32(i32, i1)
|
|
|
|
declare i64 @llvm.ctlz.i64(i64, i1)
|
|
|
|
declare float @llvm.sqrt.f32(float)
|
|
|
|
declare double @llvm.sqrt.f64(double)
|
|
|
|
; Test llvm intrinsics
|
|
;
|
|
define void @libm() {
|
|
fcmp uno float 1.000000e+00, 2.000000e+00 ; <i1>:1 [#uses=0]
|
|
fcmp uno double 3.000000e+00, 4.000000e+00 ; <i1>:2 [#uses=0]
|
|
call float @llvm.sqrt.f32( float 5.000000e+00 ) ; <float>:3 [#uses=0]
|
|
call double @llvm.sqrt.f64( double 6.000000e+00 ) ; <double>:4 [#uses=0]
|
|
call i8 @llvm.ctpop.i8( i8 10 ) ; <i32>:5 [#uses=0]
|
|
call i16 @llvm.ctpop.i16( i16 11 ) ; <i32>:6 [#uses=0]
|
|
call i32 @llvm.ctpop.i32( i32 12 ) ; <i32>:7 [#uses=0]
|
|
call i64 @llvm.ctpop.i64( i64 13 ) ; <i32>:8 [#uses=0]
|
|
call i8 @llvm.ctlz.i8( i8 14, i1 true ) ; <i32>:9 [#uses=0]
|
|
call i16 @llvm.ctlz.i16( i16 15, i1 true ) ; <i32>:10 [#uses=0]
|
|
call i32 @llvm.ctlz.i32( i32 16, i1 true ) ; <i32>:11 [#uses=0]
|
|
call i64 @llvm.ctlz.i64( i64 17, i1 true ) ; <i32>:12 [#uses=0]
|
|
call i8 @llvm.cttz.i8( i8 18, i1 true ) ; <i32>:13 [#uses=0]
|
|
call i16 @llvm.cttz.i16( i16 19, i1 true ) ; <i32>:14 [#uses=0]
|
|
call i32 @llvm.cttz.i32( i32 20, i1 true ) ; <i32>:15 [#uses=0]
|
|
call i64 @llvm.cttz.i64( i64 21, i1 true ) ; <i32>:16 [#uses=0]
|
|
ret void
|
|
}
|
|
|
|
; FIXME: test ALL the intrinsics in this file.
|
|
|
|
; rdar://11542750
|
|
; CHECK: declare void @llvm.trap() #1
|
|
declare void @llvm.trap()
|
|
|
|
define void @trap() {
|
|
call void @llvm.trap()
|
|
ret void
|
|
}
|
|
|
|
; CHECK: attributes #0 = { nounwind readnone }
|
|
; CHECK: attributes #1 = { noreturn nounwind }
|