Fix is_val_statically_known for floats · rust-lang/rust@9bc7cea (original) (raw)

1

1

`//@ compile-flags: --crate-type=lib -Zmerge-functions=disabled -O

`

2

2

``

3

3

`#![feature(core_intrinsics)]

`

``

4

`+

#![feature(f16, f128)]

`

4

5

``

5

6

`use std::intrinsics::is_val_statically_known;

`

6

7

``

`@@ -49,7 +50,7 @@ pub fn _bool_false(b: bool) -> i32 {

`

49

50

``

50

51

`#[inline]

`

51

52

`pub fn _iref(a: &u8) -> i32 {

`

52

``

`-

if unsafe { is_val_statically_known(a) } { 5 } else { 4 }

`

``

53

`+

if is_val_statically_known(a) { 5 } else { 4 }

`

53

54

`}

`

54

55

``

55

56

`// CHECK-LABEL: @_iref_borrow(

`

`@@ -68,7 +69,7 @@ pub fn _iref_arg(a: &u8) -> i32 {

`

68

69

``

69

70

`#[inline]

`

70

71

`pub fn _slice_ref(a: &[u8]) -> i32 {

`

71

``

`-

if unsafe { is_val_statically_known(a) } { 7 } else { 6 }

`

``

72

`+

if is_val_statically_known(a) { 7 } else { 6 }

`

72

73

`}

`

73

74

``

74

75

`// CHECK-LABEL: @_slice_ref_borrow(

`

`@@ -84,3 +85,79 @@ pub fn _slice_ref_arg(a: &[u8]) -> i32 {

`

84

85

`// CHECK: ret i32 6

`

85

86

`_slice_ref(a)

`

86

87

`}

`

``

88

+

``

89

`+

#[inline]

`

``

90

`+

pub fn _f16(a: f16) -> i32 {

`

``

91

`+

if is_val_statically_known(a) { 1 } else { 0 }

`

``

92

`+

}

`

``

93

+

``

94

`+

// CHECK-LABEL: @_f16_true(

`

``

95

`+

#[no_mangle]

`

``

96

`+

pub fn _f16_true() -> i32 {

`

``

97

`+

// CHECK: ret i32 1

`

``

98

`+

_f16(1.0)

`

``

99

`+

}

`

``

100

+

``

101

`+

// CHECK-LABEL: @_f16_false(

`

``

102

`+

#[no_mangle]

`

``

103

`+

pub fn _f16_false(a: f16) -> i32 {

`

``

104

`+

// CHECK: ret i32 0

`

``

105

`+

_f16(a)

`

``

106

`+

}

`

``

107

+

``

108

`+

#[inline]

`

``

109

`+

pub fn _f32(a: f32) -> i32 {

`

``

110

`+

if is_val_statically_known(a) { 1 } else { 0 }

`

``

111

`+

}

`

``

112

+

``

113

`+

// CHECK-LABEL: @_f32_true(

`

``

114

`+

#[no_mangle]

`

``

115

`+

pub fn _f32_true() -> i32 {

`

``

116

`+

// CHECK: ret i32 1

`

``

117

`+

_f32(1.0)

`

``

118

`+

}

`

``

119

+

``

120

`+

// CHECK-LABEL: @_f32_false(

`

``

121

`+

#[no_mangle]

`

``

122

`+

pub fn _f32_false(a: f32) -> i32 {

`

``

123

`+

// CHECK: ret i32 0

`

``

124

`+

_f32(a)

`

``

125

`+

}

`

``

126

+

``

127

`+

#[inline]

`

``

128

`+

pub fn _f64(a: f64) -> i32 {

`

``

129

`+

if is_val_statically_known(a) { 1 } else { 0 }

`

``

130

`+

}

`

``

131

+

``

132

`+

// CHECK-LABEL: @_f64_true(

`

``

133

`+

#[no_mangle]

`

``

134

`+

pub fn _f64_true() -> i32 {

`

``

135

`+

// CHECK: ret i32 1

`

``

136

`+

_f64(1.0)

`

``

137

`+

}

`

``

138

+

``

139

`+

// CHECK-LABEL: @_f64_false(

`

``

140

`+

#[no_mangle]

`

``

141

`+

pub fn _f64_false(a: f64) -> i32 {

`

``

142

`+

// CHECK: ret i32 0

`

``

143

`+

_f64(a)

`

``

144

`+

}

`

``

145

+

``

146

`+

#[inline]

`

``

147

`+

pub fn _f128(a: f128) -> i32 {

`

``

148

`+

if is_val_statically_known(a) { 1 } else { 0 }

`

``

149

`+

}

`

``

150

+

``

151

`+

// CHECK-LABEL: @_f128_true(

`

``

152

`+

#[no_mangle]

`

``

153

`+

pub fn _f128_true() -> i32 {

`

``

154

`+

// CHECK: ret i32 1

`

``

155

`+

_f128(1.0)

`

``

156

`+

}

`

``

157

+

``

158

`+

// CHECK-LABEL: @_f128_false(

`

``

159

`+

#[no_mangle]

`

``

160

`+

pub fn _f128_false(a: f128) -> i32 {

`

``

161

`+

// CHECK: ret i32 0

`

``

162

`+

_f128(a)

`

``

163

`+

}

`