mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 16:36:40 +00:00
a4eb9e140f
based on the Function. This is currently used to implement mips16 support in the mips backend via the existing module pass resetting the subtarget. Things to note: a) This involved running resetTargetOptions before creating a new subtarget so that code generation options like soft-float could be recognized when creating the new subtarget. This is to deal with initialization code in isel lowering that only paid attention to the initial value. b) Many of the existing testcases weren't using the soft-float feature correctly. I've corrected these based on the check values assuming that was the desired behavior. c) The mips port now pays attention to the target-cpu and target-features strings when generating code for a particular function. I've removed these from one function where the requested cpu and features didn't match the check lines in the testcase. llvm-svn: 218492
39 lines
1.4 KiB
LLVM
39 lines
1.4 KiB
LLVM
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s
|
|
|
|
@x = global float 0.000000e+00, align 4
|
|
@.str = private unnamed_addr constant [20 x i8] c"in main: mips16 %f\0A\00", align 1
|
|
|
|
; Function Attrs: nounwind
|
|
define void @foo() #0 {
|
|
entry:
|
|
%0 = load float* @x, align 4
|
|
%conv = fpext float %0 to double
|
|
%add = fadd double %conv, 1.500000e+00
|
|
%conv1 = fptrunc double %add to float
|
|
store float %conv1, float* @x, align 4
|
|
ret void
|
|
}
|
|
; CHECK: .ent foo
|
|
; CHECK: jal __mips16_extendsfdf2
|
|
; CHECK: .end foo
|
|
|
|
; Function Attrs: nounwind
|
|
define void @nofoo() #1 {
|
|
entry:
|
|
%0 = load float* @x, align 4
|
|
%conv = fpext float %0 to double
|
|
%add = fadd double %conv, 3.900000e+00
|
|
%conv1 = fptrunc double %add to float
|
|
store float %conv1, float* @x, align 4
|
|
ret void
|
|
}
|
|
|
|
; CHECK: .ent nofoo
|
|
; CHECK: cvt.d.s $f{{.+}}, $f{{.+}}
|
|
; CHECK: .end nofoo
|
|
|
|
|
|
attributes #0 = { nounwind "less-precise-fpmad"="false" "mips16" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "nomips16" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
|