forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			133 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc < %s -march=x86-64 -mattr=+sse41 | FileCheck -check-prefix=CHECK-SSE %s
 | |
| ; RUN: llc < %s -march=x86-64 -mattr=+avx | FileCheck -check-prefix=CHECK-AVX %s
 | |
| 
 | |
| define float @test1(float %x) nounwind  {
 | |
|   %call = tail call float @floorf(float %x) nounwind readnone
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-SSE: test1:
 | |
| ; CHECK-SSE: roundss $1
 | |
| 
 | |
| ; CHECK-AVX: test1:
 | |
| ; CHECK-AVX: vroundss $1
 | |
| }
 | |
| 
 | |
| declare float @floorf(float) nounwind readnone
 | |
| 
 | |
| define double @test2(double %x) nounwind  {
 | |
|   %call = tail call double @floor(double %x) nounwind readnone
 | |
|   ret double %call
 | |
| 
 | |
| ; CHECK-SSE: test2:
 | |
| ; CHECK-SSE: roundsd $1
 | |
| 
 | |
| ; CHECK-AVX: test2:
 | |
| ; CHECK-AVX: vroundsd $1
 | |
| }
 | |
| 
 | |
| declare double @floor(double) nounwind readnone
 | |
| 
 | |
| define float @test3(float %x) nounwind  {
 | |
|   %call = tail call float @nearbyintf(float %x) nounwind readnone
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-SSE: test3:
 | |
| ; CHECK-SSE: roundss $12
 | |
| 
 | |
| ; CHECK-AVX: test3:
 | |
| ; CHECK-AVX: vroundss $12
 | |
| }
 | |
| 
 | |
| declare float @nearbyintf(float) nounwind readnone
 | |
| 
 | |
| define double @test4(double %x) nounwind  {
 | |
|   %call = tail call double @nearbyint(double %x) nounwind readnone
 | |
|   ret double %call
 | |
| 
 | |
| ; CHECK-SSE: test4:
 | |
| ; CHECK-SSE: roundsd $12
 | |
| 
 | |
| ; CHECK-AVX: test4:
 | |
| ; CHECK-AVX: vroundsd $12
 | |
| }
 | |
| 
 | |
| declare double @nearbyint(double) nounwind readnone
 | |
| 
 | |
| define float @test5(float %x) nounwind  {
 | |
|   %call = tail call float @ceilf(float %x) nounwind readnone
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-SSE: test5:
 | |
| ; CHECK-SSE: roundss $2
 | |
| 
 | |
| ; CHECK-AVX: test5:
 | |
| ; CHECK-AVX: vroundss $2
 | |
| }
 | |
| 
 | |
| declare float @ceilf(float) nounwind readnone
 | |
| 
 | |
| define double @test6(double %x) nounwind  {
 | |
|   %call = tail call double @ceil(double %x) nounwind readnone
 | |
|   ret double %call
 | |
| 
 | |
| ; CHECK-SSE: test6:
 | |
| ; CHECK-SSE: roundsd $2
 | |
| 
 | |
| ; CHECK-AVX: test6:
 | |
| ; CHECK-AVX: vroundsd $2
 | |
| }
 | |
| 
 | |
| declare double @ceil(double) nounwind readnone
 | |
| 
 | |
| define float @test7(float %x) nounwind  {
 | |
|   %call = tail call float @rintf(float %x) nounwind readnone
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-SSE: test7:
 | |
| ; CHECK-SSE: roundss $4
 | |
| 
 | |
| ; CHECK-AVX: test7:
 | |
| ; CHECK-AVX: vroundss $4
 | |
| }
 | |
| 
 | |
| declare float @rintf(float) nounwind readnone
 | |
| 
 | |
| define double @test8(double %x) nounwind  {
 | |
|   %call = tail call double @rint(double %x) nounwind readnone
 | |
|   ret double %call
 | |
| 
 | |
| ; CHECK-SSE: test8:
 | |
| ; CHECK-SSE: roundsd $4
 | |
| 
 | |
| ; CHECK-AVX: test8:
 | |
| ; CHECK-AVX: vroundsd $4
 | |
| }
 | |
| 
 | |
| declare double @rint(double) nounwind readnone
 | |
| 
 | |
| define float @test9(float %x) nounwind  {
 | |
|   %call = tail call float @truncf(float %x) nounwind readnone
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-SSE: test9:
 | |
| ; CHECK-SSE: roundss $3
 | |
| 
 | |
| ; CHECK-AVX: test9:
 | |
| ; CHECK-AVX: vroundss $3
 | |
| }
 | |
| 
 | |
| declare float @truncf(float) nounwind readnone
 | |
| 
 | |
| define double @test10(double %x) nounwind  {
 | |
|   %call = tail call double @trunc(double %x) nounwind readnone
 | |
|   ret double %call
 | |
| 
 | |
| ; CHECK-SSE: test10:
 | |
| ; CHECK-SSE: roundsd $3
 | |
| 
 | |
| ; CHECK-AVX: test10:
 | |
| ; CHECK-AVX: vroundsd $3
 | |
| }
 | |
| 
 | |
| declare double @trunc(double) nounwind readnone
 |