214 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc -march=mips64 -mcpu=mips64r2 -mattr=+soft-float -O2 < %s | FileCheck %s
 | |
| 
 | |
| define void @foosf() #0 {
 | |
| entry:
 | |
|   %in = alloca float, align 4
 | |
|   %out = alloca float, align 4
 | |
|   store volatile float 0xBFD59E1380000000, float* %in, align 4
 | |
|   %in.0.in.0. = load volatile float, float* %in, align 4
 | |
|   %rintf = tail call float @rintf(float %in.0.in.0.) #1
 | |
|   store volatile float %rintf, float* %out, align 4
 | |
|   ret void
 | |
| 
 | |
| ; CHECK-LABEL:      foosf
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @rintf(float)
 | |
| 
 | |
| define float @foosf1(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %call = tail call float @roundf(float %0) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf1
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @roundf(float) #1
 | |
| 
 | |
| define float @foosf2(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %call = tail call float @truncf(float %0) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf2
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @truncf(float) #1
 | |
| 
 | |
| define float @foosf3(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %call = tail call float @floorf(float %0) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf3
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @floorf(float) #1
 | |
| 
 | |
| define float @foosf4(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %call = tail call float @nearbyintf(float %0) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf4
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @nearbyintf(float) #1
 | |
| 
 | |
| define float @foosf5(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %mul = fmul float %0, undef
 | |
|   ret float %mul
 | |
| 
 | |
| ; CHECK-LABEL:      foosf5
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| define float @foosf6(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %sub = fsub float %0, undef
 | |
|   ret float %sub
 | |
| 
 | |
| ; CHECK-LABEL:      foosf6
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| define float @foosf7(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %add = fadd float %0, undef
 | |
|   ret float %add
 | |
| 
 | |
| ; CHECK-LABEL:      foosf7
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| define float @foosf8(float* nocapture readonly %a) #0 {
 | |
| entry:
 | |
|   %b = alloca float, align 4
 | |
|   %b.0.b.0. = load volatile float, float* %b, align 4
 | |
|   %0 = load float, float* %a, align 4
 | |
|   %div = fdiv float %b.0.b.0., %0
 | |
|   ret float %div
 | |
| 
 | |
| ; CHECK-LABEL:      foosf8
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| define float @foosf9() #0 {
 | |
| entry:
 | |
|   %b = alloca float, align 4
 | |
|   %b.0.b.0. = load volatile float, float* %b, align 4
 | |
|   %conv = fpext float %b.0.b.0. to double
 | |
|   %b.0.b.0.3 = load volatile float, float* %b, align 4
 | |
|   %conv1 = fpext float %b.0.b.0.3 to double
 | |
|   %call = tail call double @pow(double %conv, double %conv1) #1
 | |
|   %conv2 = fptrunc double %call to float
 | |
|   ret float %conv2
 | |
| 
 | |
| ; CHECK-LABEL:      foosf9
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare double @pow(double, double) #0
 | |
| 
 | |
| define float @foosf10() #0 {
 | |
| entry:
 | |
|   %a = alloca float, align 4
 | |
|   %a.0.a.0. = load volatile float, float* %a, align 4
 | |
|   %conv = fpext float %a.0.a.0. to double
 | |
|   %call = tail call double @sin(double %conv) #1
 | |
|   %conv1 = fptrunc double %call to float
 | |
|   ret float %conv1
 | |
| 
 | |
| ; CHECK-LABEL:      foosf10
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare double @sin(double) #0
 | |
| 
 | |
| define float @foosf11() #0 {
 | |
| entry:
 | |
|   %b = alloca float, align 4
 | |
|   %b.0.b.0. = load volatile float, float* %b, align 4
 | |
|   %call = tail call float @ceilf(float %b.0.b.0.) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf11
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @ceilf(float) #1
 | |
| 
 | |
| define float @foosf12() #0 {
 | |
| entry:
 | |
|   %b = alloca float, align 4
 | |
|   %a = alloca float, align 4
 | |
|   %b.0.b.0. = load volatile float, float* %b, align 4
 | |
|   %a.0.a.0. = load volatile float, float* %a, align 4
 | |
|   %call = tail call float @fmaxf(float %b.0.b.0., float %a.0.a.0.) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf12
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @fmaxf(float, float) #1
 | |
| 
 | |
| define float @foosf13() #0 {
 | |
| entry:
 | |
|   %b = alloca float, align 4
 | |
|   %a = alloca float, align 4
 | |
|   %b.0.b.0. = load volatile float, float* %b, align 4
 | |
|   %a.0.a.0. = load volatile float, float* %a, align 4
 | |
|   %call = tail call float @fminf(float %b.0.b.0., float %a.0.a.0.) #2
 | |
|   ret float %call
 | |
| 
 | |
| ; CHECK-LABEL:      foosf13
 | |
| ; CHECK-NOT:        dsll
 | |
| ; CHECK-NOT:        dsrl
 | |
| ; CHECK-NOT:        lwu
 | |
| }
 | |
| 
 | |
| declare float @fminf(float, float) #1
 | |
| 
 | |
| 
 | |
| attributes #0 = { nounwind "use-soft-float"="true" }
 | |
| attributes #1 = { nounwind readnone "use-soft-float"="true" } |