[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / X86 / fp_load_fold.ll
blob58d2b686a86970ce8502188abd1edf2b095f5fdf
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-- -x86-asm-syntax=intel | FileCheck %s
4 ; Test that the load of the memory location is folded into the operation.
6 define double @test_add(double %X, ptr %P) {
7 ; CHECK-LABEL: test_add:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
10 ; CHECK-NEXT:    fld qword ptr [esp + 4]
11 ; CHECK-NEXT:    fadd qword ptr [eax]
12 ; CHECK-NEXT:    ret
13         %Y = load double, ptr %P                ; <double> [#uses=1]
14         %R = fadd double %X, %Y         ; <double> [#uses=1]
15         ret double %R
18 define double @test_mul(double %X, ptr %P) {
19 ; CHECK-LABEL: test_mul:
20 ; CHECK:       # %bb.0:
21 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
22 ; CHECK-NEXT:    fld qword ptr [esp + 4]
23 ; CHECK-NEXT:    fmul qword ptr [eax]
24 ; CHECK-NEXT:    ret
25         %Y = load double, ptr %P                ; <double> [#uses=1]
26         %R = fmul double %X, %Y         ; <double> [#uses=1]
27         ret double %R
30 define double @test_sub(double %X, ptr %P) {
31 ; CHECK-LABEL: test_sub:
32 ; CHECK:       # %bb.0:
33 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
34 ; CHECK-NEXT:    fld qword ptr [esp + 4]
35 ; CHECK-NEXT:    fsub qword ptr [eax]
36 ; CHECK-NEXT:    ret
37         %Y = load double, ptr %P                ; <double> [#uses=1]
38         %R = fsub double %X, %Y         ; <double> [#uses=1]
39         ret double %R
42 define double @test_subr(double %X, ptr %P) {
43 ; CHECK-LABEL: test_subr:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
46 ; CHECK-NEXT:    fld qword ptr [eax]
47 ; CHECK-NEXT:    fsub qword ptr [esp + 4]
48 ; CHECK-NEXT:    ret
49         %Y = load double, ptr %P                ; <double> [#uses=1]
50         %R = fsub double %Y, %X         ; <double> [#uses=1]
51         ret double %R
54 define double @test_div(double %X, ptr %P) {
55 ; CHECK-LABEL: test_div:
56 ; CHECK:       # %bb.0:
57 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
58 ; CHECK-NEXT:    fld qword ptr [esp + 4]
59 ; CHECK-NEXT:    fdiv qword ptr [eax]
60 ; CHECK-NEXT:    ret
61         %Y = load double, ptr %P                ; <double> [#uses=1]
62         %R = fdiv double %X, %Y         ; <double> [#uses=1]
63         ret double %R
66 define double @test_divr(double %X, ptr %P) {
67 ; CHECK-LABEL: test_divr:
68 ; CHECK:       # %bb.0:
69 ; CHECK-NEXT:    mov eax, dword ptr [esp + 12]
70 ; CHECK-NEXT:    fld qword ptr [eax]
71 ; CHECK-NEXT:    fdiv qword ptr [esp + 4]
72 ; CHECK-NEXT:    ret
73         %Y = load double, ptr %P                ; <double> [#uses=1]
74         %R = fdiv double %Y, %X         ; <double> [#uses=1]
75         ret double %R