1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=x86_64-apple-macosx10.10.0 < %s | FileCheck %s 3 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 include 7; the constant load values because those are important. 8 9; CHECK: [[SIGNMASK1:L.+]]: 10; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 11; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 12 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), %xmm0 17; CHECK-NEXT: retq 18 %y = call double @copysign(double 0.0, double %x) 19 ret double %y 20} 21 22; CHECK: [[SIGNMASK2:L.+]]: 23; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 24 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), %xmm0 29; CHECK-NEXT: retq 30 %y = call double @copysign(double -0.0, double %x) 31 ret double %y 32} 33 34; CHECK: [[SIGNMASK3:L.+]]: 35; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 36; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 37; CHECK: [[ONE3:L.+]]: 38; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 1 39 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), %xmm0 44; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 45; CHECK-NEXT: retq 46 %y = call double @copysign(double 1.0, double %x) 47 ret double %y 48} 49 50; CHECK: [[SIGNMASK4:L.+]]: 51; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 52; CHECK-NEXT: .quad 0x8000000000000000 ## double -0 53; CHECK: [[ONE4:L.+]]: 54; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 1 55; CHECK-NEXT: .quad 0x3ff0000000000000 ## double 1 56 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), %xmm0 61; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 62; CHECK-NEXT: retq 63 %y = call double @copysign(double -1.0, double %x) 64 ret double %y 65} 66 67; CHECK: [[SIGNMASK5:L.+]]: 68; CHECK-NEXT: .long 0x80000000 ## float -0 69; CHECK-NEXT: .long 0x80000000 ## float -0 70; CHECK-NEXT: .long 0x80000000 ## float -0 71; CHECK-NEXT: .long 0x80000000 ## float -0 72 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), %xmm0 77; CHECK-NEXT: retq 78 %y = call float @copysignf(float 0.0, float %x) 79 ret float %y 80} 81 82; CHECK: [[SIGNMASK6:L.+]]: 83; CHECK-NEXT: .long 0x80000000 ## float -0 84 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), %xmm0 89; CHECK-NEXT: retq 90 %y = call float @copysignf(float -0.0, float %x) 91 ret float %y 92} 93 94; CHECK: [[SIGNMASK7:L.+]]: 95; CHECK-NEXT: .long 0x80000000 ## float -0 96; CHECK-NEXT: .long 0x80000000 ## float -0 97; CHECK-NEXT: .long 0x80000000 ## float -0 98; CHECK-NEXT: .long 0x80000000 ## float -0 99; CHECK: [[ONE7:L.+]]: 100; CHECK-NEXT: .long 0x3f800000 ## float 1 101 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), %xmm0 106; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 107; CHECK-NEXT: retq 108 %y = call float @copysignf(float 1.0, float %x) 109 ret float %y 110} 111 112; CHECK: [[SIGNMASK8:L.+]]: 113; CHECK-NEXT: .long 0x80000000 ## float -0 114; CHECK-NEXT: .long 0x80000000 ## float -0 115; CHECK-NEXT: .long 0x80000000 ## float -0 116; CHECK-NEXT: .long 0x80000000 ## float -0 117; CHECK: [[ONE8:L.+]]: 118; CHECK-NEXT: .long 0x3f800000 ## float 1 119; CHECK-NEXT: .long 0x3f800000 ## float 1 120; CHECK-NEXT: .long 0x3f800000 ## float 1 121; CHECK-NEXT: .long 0x3f800000 ## float 1 122 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), %xmm0 127; CHECK-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 128; CHECK-NEXT: retq 129 %y = call float @copysignf(float -1.0, float %x) 130 ret float %y 131} 132 133declare double @copysign(double, double) nounwind readnone 134declare float @copysignf(float, float) nounwind readnone 135 136