blob: ccbd7189910cef47b7893e45b7760f656b9f2948 [file]
; RUN: llvm-as < %s | llvm-dis | FileCheck %s
; Invalid but didn't fail the verifier
define void @str_denormal_fp_math_no_val() "denormal-fp-math" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_no_val(
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
; Invalid but didn't fail the verifier
define void @str_denormal_fp_math_empty_str() "denormal-fp-math"="" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_empty_str(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee() "denormal-fp-math"="ieee" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee_ieee() "denormal-fp-math"="ieee,ieee" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee_ieee(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_preserve_sign() "denormal-fp-math"="preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_preserve_sign(
; CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_preserve_sign_preserve_sign() "denormal-fp-math"="preserve-sign,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_preserve_sign_preserve_sign(
; CHECK-SAME: ) #[[ATTR1]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_dynamic() "denormal-fp-math"="dynamic" {
; CHECK: Function Attrs: denormal_fpenv(dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_dynamic(
; CHECK-SAME: ) #[[ATTR2:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_dynamic_dynamic() "denormal-fp-math"="dynamic,dynamic" {
; CHECK: Function Attrs: denormal_fpenv(dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_dynamic_dynamic(
; CHECK-SAME: ) #[[ATTR2]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_positivezero() "denormal-fp-math"="positive-zero" {
; CHECK: Function Attrs: denormal_fpenv(positivezero)
; CHECK-LABEL: define void @str_denormal_fp_math_positivezero(
; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_positivezero_positivezero() "denormal-fp-math"="positive-zero,positive-zero" {
; CHECK: Function Attrs: denormal_fpenv(positivezero)
; CHECK-LABEL: define void @str_denormal_fp_math_positivezero_positivezero(
; CHECK-SAME: ) #[[ATTR3]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee_preservesign() "denormal-fp-math"="ieee,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(ieee|preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee_preservesign(
; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_preservesign_ieee() "denormal-fp-math"="preserve-sign,ieee" {
; CHECK: Function Attrs: denormal_fpenv(preservesign|ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_preservesign_ieee(
; CHECK-SAME: ) #[[ATTR5:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
; Invalid but didn't fail the verifier
define void @str_denormal_fp_math_f32_no_val() "denormal-fp-math-f32" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_no_val(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
; Invalid but didn't fail the verifier
define void @str_denormal_fp_math_f32_empty_str() "denormal-fp-math-f32"="" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_empty_str(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_ieee() "denormal-fp-math-f32"="ieee" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_ieee(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_ieee_ieee() "denormal-fp-math-f32"="ieee,ieee" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_ieee_ieee(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_preserve_sign() "denormal-fp-math-f32"="preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(float: preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_preserve_sign(
; CHECK-SAME: ) #[[ATTR6:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_preserve_sign_preserve_sign() "denormal-fp-math-f32"="preserve-sign,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(float: preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_preserve_sign_preserve_sign(
; CHECK-SAME: ) #[[ATTR6]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_dynamic() "denormal-fp-math-f32"="dynamic" {
; CHECK: Function Attrs: denormal_fpenv(float: dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_dynamic(
; CHECK-SAME: ) #[[ATTR7:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_dynamic_dynamic() "denormal-fp-math-f32"="dynamic,dynamic" {
; CHECK: Function Attrs: denormal_fpenv(float: dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_dynamic_dynamic(
; CHECK-SAME: ) #[[ATTR7]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_positivezero() "denormal-fp-math-f32"="positive-zero" {
; CHECK: Function Attrs: denormal_fpenv(float: positivezero)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_positivezero(
; CHECK-SAME: ) #[[ATTR8:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_positivezero_positivezero() "denormal-fp-math-f32"="positive-zero,positive-zero" {
; CHECK: Function Attrs: denormal_fpenv(float: positivezero)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_positivezero_positivezero(
; CHECK-SAME: ) #[[ATTR8]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_ieee_preservesign() "denormal-fp-math-f32"="ieee,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(float: ieee|preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_ieee_preservesign(
; CHECK-SAME: ) #[[ATTR9:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_f32_preservesign_ieee() "denormal-fp-math-f32"="preserve-sign,ieee" {
; CHECK: Function Attrs: denormal_fpenv(float: preservesign|ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_f32_preservesign_ieee(
; CHECK-SAME: ) #[[ATTR10:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee__denormal_fp_math_f32_ieee() "denormal-fp-math"="ieee" "denormal-fp-math-f32"="ieee" {
; CHECK: Function Attrs: denormal_fpenv(ieee)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee__denormal_fp_math_f32_ieee(
; CHECK-SAME: ) #[[ATTR0]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee__denormal_fp_math_f32_preserve_sign() "denormal-fp-math"="ieee" "denormal-fp-math-f32"="preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(float: preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee__denormal_fp_math_f32_preserve_sign(
; CHECK-SAME: ) #[[ATTR6]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee_ieee__denormal_fp_math_f32_preserve_sign_preserve_sign() "denormal-fp-math"="ieee,ieee" "denormal-fp-math-f32"="preserve-sign,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(float: preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee_ieee__denormal_fp_math_f32_preserve_sign_preserve_sign(
; CHECK-SAME: ) #[[ATTR6]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_ieee_ieee__denormal_fp_math_f32_preserve_sign_dynamic_dynamic() "denormal-fp-math"="ieee,ieee" "denormal-fp-math-f32"="dynamic,dynamic" {
; CHECK: Function Attrs: denormal_fpenv(float: dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_ieee_ieee__denormal_fp_math_f32_preserve_sign_dynamic_dynamic(
; CHECK-SAME: ) #[[ATTR7]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_dynamic_dynamic__denormal_fp_math_f32_preserve_sign_dynamic_dynamic() "denormal-fp-math"="dynamic,dynamic" "denormal-fp-math-f32"="dynamic,dynamic" {
; CHECK: Function Attrs: denormal_fpenv(dynamic)
; CHECK-LABEL: define void @str_denormal_fp_math_dynamic_dynamic__denormal_fp_math_f32_preserve_sign_dynamic_dynamic(
; CHECK-SAME: ) #[[ATTR2]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_dynamic_dynamic__denormal_fp_math_f32_preserve_sign_preserve_sign() "denormal-fp-math"="dynamic,dynamic" "denormal-fp-math-f32"="preserve-sign,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(dynamic, float: preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_dynamic_dynamic__denormal_fp_math_f32_preserve_sign_preserve_sign(
; CHECK-SAME: ) #[[ATTR11:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
define void @str_denormal_fp_math_dynamic_positive_zero__denormal_fp_math_f32_preserve_sign_dynamic_preserve_sign() "denormal-fp-math"="dynamic,positive-zero" "denormal-fp-math-f32"="dynamic,preserve-sign" {
; CHECK: Function Attrs: denormal_fpenv(dynamic|positivezero, float: dynamic|preservesign)
; CHECK-LABEL: define void @str_denormal_fp_math_dynamic_positive_zero__denormal_fp_math_f32_preserve_sign_dynamic_preserve_sign(
; CHECK-SAME: ) #[[ATTR12:[0-9]+]] {
; CHECK-NEXT: ret void
;
ret void
}
declare void @func()
; These never did anything, but the new attribute fails the verifier
; on call sites.
define void @ignore_callsite_attrs() {
; CHECK-LABEL: define void @ignore_callsite_attrs() {
; CHECK-NEXT: call void @func() #[[ATTR19:[0-9]+]]
; CHECK-NEXT: call void @func() #[[ATTR20:[0-9]+]]
; CHECK-NEXT: call void @func() #[[ATTR21:[0-9]+]]
; CHECK-NEXT: ret void
;
call void @func() "denormal-fp-math"="preserve-sign,preserve-sign"
call void @func() "denormal-fp-math-f32"="preserve-sign,preserve-sign"
call void @func() "denormal-fp-math"="dynamic,ieee" "denormal-fp-math-f32"="preserve-sign,preserve-sign"
ret void
}
define float @test_denormal_fp_math_invalid1() "denormal-fp-math"="foo,ieee" {
; CHECK-LABEL: define float @test_denormal_fp_math_invalid1(
; CHECK-SAME: ) #[[ATTR13:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
define float @test_denormal_fp_math_invalid2() "denormal-fp-math"="ieee,ieee,ieee" {
; CHECK-LABEL: define float @test_denormal_fp_math_invalid2(
; CHECK-SAME: ) #[[ATTR14:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
define float @test_denormal_fp_math_f32_invalid() "denormal-fp-math-f32"="foo,ieee" {
; CHECK-LABEL: define float @test_denormal_fp_math_f32_invalid(
; CHECK-SAME: ) #[[ATTR15:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
define float @test_both_denormal_fp_math_invalid() "denormal-fp-math"="bar" "denormal-fp-math-f32"="foo,ieee" {
; CHECK-LABEL: define float @test_both_denormal_fp_math_invalid(
; CHECK-SAME: ) #[[ATTR16:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
define float @test_denormal_fp_math_invalid_with_invalid_f32() "denormal-fp-math"="dynamic,dynamic" "denormal-fp-math-f32"="foo,ieee" {
; CHECK: Function Attrs: denormal_fpenv(dynamic)
; CHECK-LABEL: define float @test_denormal_fp_math_invalid_with_invalid_f32(
; CHECK-SAME: ) #[[ATTR17:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
define float @test_invalid_denormal_fp_math_with_valid_f32() "denormal-fp-math"="foo,dynamic" "denormal-fp-math-f32"="dynamic,dynamic" {
; CHECK: Function Attrs: denormal_fpenv(float: dynamic)
; CHECK-LABEL: define float @test_invalid_denormal_fp_math_with_valid_f32(
; CHECK-SAME: ) #[[ATTR18:[0-9]+]] {
; CHECK-NEXT: ret float 1.000000e+00
;
ret float 1.0
}
;.
; CHECK: attributes #[[ATTR0]] = { denormal_fpenv(ieee) }
; CHECK: attributes #[[ATTR1]] = { denormal_fpenv(preservesign) }
; CHECK: attributes #[[ATTR2]] = { denormal_fpenv(dynamic) }
; CHECK: attributes #[[ATTR3]] = { denormal_fpenv(positivezero) }
; CHECK: attributes #[[ATTR4]] = { denormal_fpenv(ieee|preservesign) }
; CHECK: attributes #[[ATTR5]] = { denormal_fpenv(preservesign|ieee) }
; CHECK: attributes #[[ATTR6]] = { denormal_fpenv(float: preservesign) }
; CHECK: attributes #[[ATTR7]] = { denormal_fpenv(float: dynamic) }
; CHECK: attributes #[[ATTR8]] = { denormal_fpenv(float: positivezero) }
; CHECK: attributes #[[ATTR9]] = { denormal_fpenv(float: ieee|preservesign) }
; CHECK: attributes #[[ATTR10]] = { denormal_fpenv(float: preservesign|ieee) }
; CHECK: attributes #[[ATTR11]] = { denormal_fpenv(dynamic, float: preservesign) }
; CHECK: attributes #[[ATTR12]] = { denormal_fpenv(dynamic|positivezero, float: dynamic|preservesign) }
; CHECK: attributes #[[ATTR13]] = { "denormal-fp-math"="foo,ieee" }
; CHECK: attributes #[[ATTR14]] = { "denormal-fp-math"="ieee,ieee,ieee" }
; CHECK: attributes #[[ATTR15]] = { "denormal-fp-math-f32"="foo,ieee" }
; CHECK: attributes #[[ATTR16]] = { "denormal-fp-math"="bar" "denormal-fp-math-f32"="foo,ieee" }
; CHECK: attributes #[[ATTR17]] = { denormal_fpenv(dynamic) "denormal-fp-math-f32"="foo,ieee" }
; CHECK: attributes #[[ATTR18]] = { denormal_fpenv(float: dynamic) "denormal-fp-math"="foo,dynamic" }
; CHECK: attributes #[[ATTR19]] = { "denormal-fp-math"="preserve-sign,preserve-sign" }
; CHECK: attributes #[[ATTR20]] = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" }
; CHECK: attributes #[[ATTR21]] = { "denormal-fp-math"="dynamic,ieee" "denormal-fp-math-f32"="preserve-sign,preserve-sign" }
;.