Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / SPARC / float-constants.ll
blob8424bf216dd4efa4cfabf5d0937e9a93d7032ce8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -march=sparc | FileCheck %s
3 ; RUN: llc < %s -march=sparcel | FileCheck %s --check-prefix=CHECK-LE
5 ;; Bitcast should not do a runtime conversion, but rather emit a
6 ;; constant into integer registers directly.
8 define <2 x i32> @bitcast() nounwind {
9 ; CHECK-LABEL: bitcast:
10 ; CHECK:       ! %bb.0:
11 ; CHECK-NEXT:    sethi 1049856, %o0
12 ; CHECK-NEXT:    retl
13 ; CHECK-NEXT:    mov %g0, %o1
15 ; CHECK-LE-LABEL: bitcast:
16 ; CHECK-LE:       ! %bb.0:
17 ; CHECK-LE-NEXT:    sethi 1049856, %o1
18 ; CHECK-LE-NEXT:    retl
19 ; CHECK-LE-NEXT:    mov %g0, %o0
20   %1 = bitcast double 5.0 to <2 x i32>
21   ret <2 x i32> %1
24 ;; Same thing for a call using a double (which gets passed in integer
25 ;; registers)
27 declare void @a(double)
28 define void @test_call() nounwind {
29 ; CHECK-LABEL: test_call:
30 ; CHECK:       ! %bb.0:
31 ; CHECK-NEXT:    save %sp, -96, %sp
32 ; CHECK-NEXT:    sethi 1049856, %o0
33 ; CHECK-NEXT:    call a
34 ; CHECK-NEXT:    mov %g0, %o1
35 ; CHECK-NEXT:    ret
36 ; CHECK-NEXT:    restore
38 ; CHECK-LE-LABEL: test_call:
39 ; CHECK-LE:       ! %bb.0:
40 ; CHECK-LE-NEXT:    save %sp, -96, %sp
41 ; CHECK-LE-NEXT:    sethi 1049856, %o1
42 ; CHECK-LE-NEXT:    call a
43 ; CHECK-LE-NEXT:    mov %g0, %o0
44 ; CHECK-LE-NEXT:    ret
45 ; CHECK-LE-NEXT:    restore
46   call void @a(double 5.0)
47   ret void
50 ;; And for a libcall emitted from the pow intrinsic.  (libcall
51 ;; emission happens after SelectionDAG type legalization, so is a bit
52 ;; different than a normal function call. This was crashing before,
53 ;; due to an earlier broken workaround for this issue.)
55 declare double @llvm.pow.f64(double, double)
56 define double @test_intrins_call() nounwind {
57 ; CHECK-LABEL: test_intrins_call:
58 ; CHECK:       ! %bb.0:
59 ; CHECK-NEXT:    save %sp, -96, %sp
60 ; CHECK-NEXT:    sethi 1048576, %o0
61 ; CHECK-NEXT:    mov %g0, %o1
62 ; CHECK-NEXT:    mov %o0, %o2
63 ; CHECK-NEXT:    call pow
64 ; CHECK-NEXT:    mov %g0, %o3
65 ; CHECK-NEXT:    ret
66 ; CHECK-NEXT:    restore
68 ; CHECK-LE-LABEL: test_intrins_call:
69 ; CHECK-LE:       ! %bb.0:
70 ; CHECK-LE-NEXT:    save %sp, -96, %sp
71 ; CHECK-LE-NEXT:    sethi 1048576, %o1
72 ; CHECK-LE-NEXT:    mov %g0, %o0
73 ; CHECK-LE-NEXT:    mov %g0, %o2
74 ; CHECK-LE-NEXT:    call pow
75 ; CHECK-LE-NEXT:    mov %o1, %o3
76 ; CHECK-LE-NEXT:    ret
77 ; CHECK-LE-NEXT:    restore
78   %1 = call double @llvm.pow.f64(double 2.0, double 2.0)
79   ret double %1