77 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- -x86-asm-syntax=intel | FileCheck %s3 4; Test that the load of the memory location is folded into the operation.5 6define 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: ret13 %Y = load double, ptr %P ; <double> [#uses=1]14 %R = fadd double %X, %Y ; <double> [#uses=1]15 ret double %R16}17 18define 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: ret25 %Y = load double, ptr %P ; <double> [#uses=1]26 %R = fmul double %X, %Y ; <double> [#uses=1]27 ret double %R28}29 30define 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: ret37 %Y = load double, ptr %P ; <double> [#uses=1]38 %R = fsub double %X, %Y ; <double> [#uses=1]39 ret double %R40}41 42define 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: ret49 %Y = load double, ptr %P ; <double> [#uses=1]50 %R = fsub double %Y, %X ; <double> [#uses=1]51 ret double %R52}53 54define 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: ret61 %Y = load double, ptr %P ; <double> [#uses=1]62 %R = fdiv double %X, %Y ; <double> [#uses=1]63 ret double %R64}65 66define 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: ret73 %Y = load double, ptr %P ; <double> [#uses=1]74 %R = fdiv double %Y, %X ; <double> [#uses=1]75 ret double %R76}77