136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-apple-macosx10.10.0 < %s | FileCheck %s3 4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"5 6; The assertions are *enhanced* from update_test_checks.ll to include7; the constant load values because those are important.8 9; CHECK: [[SIGNMASK1:L.+]]:10; CHECK-NEXT: .quad 0x8000000000000000 ## double -011; CHECK-NEXT: .quad 0x8000000000000000 ## double -012 13define double @mag_pos0_double(double %x) nounwind {14; CHECK-LABEL: mag_pos0_double:15; CHECK: ## %bb.0:16; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm017; CHECK-NEXT: retq18 %y = call double @copysign(double 0.0, double %x)19 ret double %y20}21 22; CHECK: [[SIGNMASK2:L.+]]:23; CHECK-NEXT: .quad 0x8000000000000000 ## double -024 25define double @mag_neg0_double(double %x) nounwind {26; CHECK-LABEL: mag_neg0_double:27; CHECK: ## %bb.0:28; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm029; CHECK-NEXT: retq30 %y = call double @copysign(double -0.0, double %x)31 ret double %y32}33 34; CHECK: [[SIGNMASK3:L.+]]:35; CHECK-NEXT: .quad 0x8000000000000000 ## double -036; CHECK-NEXT: .quad 0x8000000000000000 ## double -037; CHECK: [[ONE3:L.+]]:38; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 139 40define double @mag_pos1_double(double %x) nounwind {41; CHECK-LABEL: mag_pos1_double:42; CHECK: ## %bb.0:43; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm044; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm045; CHECK-NEXT: retq46 %y = call double @copysign(double 1.0, double %x)47 ret double %y48}49 50; CHECK: [[SIGNMASK4:L.+]]:51; CHECK-NEXT: .quad 0x8000000000000000 ## double -052; CHECK-NEXT: .quad 0x8000000000000000 ## double -053; CHECK: [[ONE4:L.+]]:54; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 155; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 156 57define double @mag_neg1_double(double %x) nounwind {58; CHECK-LABEL: mag_neg1_double:59; CHECK: ## %bb.0:60; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm061; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm062; CHECK-NEXT: retq63 %y = call double @copysign(double -1.0, double %x)64 ret double %y65}66 67; CHECK: [[SIGNMASK5:L.+]]:68; CHECK-NEXT: .long 0x80000000 ## float -069; CHECK-NEXT: .long 0x80000000 ## float -070; CHECK-NEXT: .long 0x80000000 ## float -071; CHECK-NEXT: .long 0x80000000 ## float -072 73define float @mag_pos0_float(float %x) nounwind {74; CHECK-LABEL: mag_pos0_float:75; CHECK: ## %bb.0:76; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm077; CHECK-NEXT: retq78 %y = call float @copysignf(float 0.0, float %x)79 ret float %y80}81 82; CHECK: [[SIGNMASK6:L.+]]:83; CHECK-NEXT: .long 0x80000000 ## float -084 85define float @mag_neg0_float(float %x) nounwind {86; CHECK-LABEL: mag_neg0_float:87; CHECK: ## %bb.0:88; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm089; CHECK-NEXT: retq90 %y = call float @copysignf(float -0.0, float %x)91 ret float %y92}93 94; CHECK: [[SIGNMASK7:L.+]]:95; CHECK-NEXT: .long 0x80000000 ## float -096; CHECK-NEXT: .long 0x80000000 ## float -097; CHECK-NEXT: .long 0x80000000 ## float -098; CHECK-NEXT: .long 0x80000000 ## float -099; CHECK: [[ONE7:L.+]]:100; CHECK-NEXT: .long 0x3f800000 ## float 1101 102define float @mag_pos1_float(float %x) nounwind {103; CHECK-LABEL: mag_pos1_float:104; CHECK: ## %bb.0:105; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0106; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0107; CHECK-NEXT: retq108 %y = call float @copysignf(float 1.0, float %x)109 ret float %y110}111 112; CHECK: [[SIGNMASK8:L.+]]:113; CHECK-NEXT: .long 0x80000000 ## float -0114; CHECK-NEXT: .long 0x80000000 ## float -0115; CHECK-NEXT: .long 0x80000000 ## float -0116; CHECK-NEXT: .long 0x80000000 ## float -0117; CHECK: [[ONE8:L.+]]:118; CHECK-NEXT: .long 0x3f800000 ## float 1119; CHECK-NEXT: .long 0x3f800000 ## float 1120; CHECK-NEXT: .long 0x3f800000 ## float 1121; CHECK-NEXT: .long 0x3f800000 ## float 1122 123define float @mag_neg1_float(float %x) nounwind {124; CHECK-LABEL: mag_neg1_float:125; CHECK: ## %bb.0:126; CHECK-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0127; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0128; CHECK-NEXT: retq129 %y = call float @copysignf(float -1.0, float %x)130 ret float %y131}132 133declare double @copysign(double, double) nounwind readnone134declare float @copysignf(float, float) nounwind readnone135 136