Skip to content

Commit c4f8ae6

Browse files
[LLVM][IR][Sanitizers] Add sanitize_numerical_stability attribute (#95051)
Add sanitize_numerical_stability attribute.
1 parent 189d471 commit c4f8ae6

File tree

6 files changed

+15
-2
lines changed

6 files changed

+15
-2
lines changed

llvm/include/llvm/Bitcode/LLVMBitCodes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,7 @@ enum AttributeKindCodes {
754754
ATTR_KIND_CORO_ONLY_DESTROY_WHEN_COMPLETE = 90,
755755
ATTR_KIND_DEAD_ON_UNWIND = 91,
756756
ATTR_KIND_RANGE = 92,
757+
ATTR_KIND_SANITIZE_NUMERICAL_STABILITY = 93,
757758
};
758759

759760
enum ComdatSelectionKindCodes {

llvm/include/llvm/IR/Attributes.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,9 @@ def SanitizeHWAddress : EnumAttr<"sanitize_hwaddress", [FnAttr]>;
285285
/// MemTagSanitizer is on.
286286
def SanitizeMemTag : EnumAttr<"sanitize_memtag", [FnAttr]>;
287287

288+
/// NumericalStabilitySanitizer is on.
289+
def SanitizeNumericalStability : EnumAttr<"sanitize_numerical_stability", [FnAttr]>;
290+
288291
/// Speculative Load Hardening is enabled.
289292
///
290293
/// Note that this uses the default compatibility (always compatible during
@@ -372,6 +375,7 @@ def : CompatRule<"isEqual<SanitizeThreadAttr>">;
372375
def : CompatRule<"isEqual<SanitizeMemoryAttr>">;
373376
def : CompatRule<"isEqual<SanitizeHWAddressAttr>">;
374377
def : CompatRule<"isEqual<SanitizeMemTagAttr>">;
378+
def : CompatRule<"isEqual<SanitizeNumericalStabilityAttr>">;
375379
def : CompatRule<"isEqual<SafeStackAttr>">;
376380
def : CompatRule<"isEqual<ShadowCallStackAttr>">;
377381
def : CompatRule<"isEqual<UseSampleProfileAttr>">;

llvm/lib/Bitcode/Reader/BitcodeReader.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2128,6 +2128,8 @@ static Attribute::AttrKind getAttrFromCode(uint64_t Code) {
21282128
return Attribute::SanitizeThread;
21292129
case bitc::ATTR_KIND_SANITIZE_MEMORY:
21302130
return Attribute::SanitizeMemory;
2131+
case bitc::ATTR_KIND_SANITIZE_NUMERICAL_STABILITY:
2132+
return Attribute::SanitizeNumericalStability;
21312133
case bitc::ATTR_KIND_SPECULATIVE_LOAD_HARDENING:
21322134
return Attribute::SpeculativeLoadHardening;
21332135
case bitc::ATTR_KIND_SWIFT_ERROR:

llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,8 @@ static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) {
828828
return bitc::ATTR_KIND_SANITIZE_THREAD;
829829
case Attribute::SanitizeMemory:
830830
return bitc::ATTR_KIND_SANITIZE_MEMORY;
831+
case Attribute::SanitizeNumericalStability:
832+
return bitc::ATTR_KIND_SANITIZE_NUMERICAL_STABILITY;
831833
case Attribute::SpeculativeLoadHardening:
832834
return bitc::ATTR_KIND_SPECULATIVE_LOAD_HARDENING;
833835
case Attribute::SwiftError:

llvm/lib/Transforms/Utils/CodeExtractor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,7 @@ Function *CodeExtractor::constructFunction(const ValueSet &inputs,
954954
case Attribute::ShadowCallStack:
955955
case Attribute::SanitizeAddress:
956956
case Attribute::SanitizeMemory:
957+
case Attribute::SanitizeNumericalStability:
957958
case Attribute::SanitizeThread:
958959
case Attribute::SanitizeHWAddress:
959960
case Attribute::SanitizeMemTag:

llvm/test/Bitcode/compatibility.ll

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,7 +1564,7 @@ exit:
15641564
; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2>
15651565

15661566
call void @f.nobuiltin() builtin
1567-
; CHECK: call void @f.nobuiltin() #51
1567+
; CHECK: call void @f.nobuiltin() #52
15681568

15691569
call fastcc noalias ptr @f.noalias() noinline
15701570
; CHECK: call fastcc noalias ptr @f.noalias() #12
@@ -1988,6 +1988,8 @@ declare void @f.nosanitize_bounds() nosanitize_bounds
19881988
declare void @f.allockind() allockind("alloc,uninitialized")
19891989
; CHECK: declare void @f.allockind() #50
19901990

1991+
declare void @f.sanitize_numerical_stability() sanitize_numerical_stability
1992+
; CHECK: declare void @f.sanitize_numerical_stability() #51
19911993

19921994
; CHECK: declare nofpclass(snan) float @nofpclass_snan(float nofpclass(snan))
19931995
declare nofpclass(snan) float @nofpclass_snan(float nofpclass(snan))
@@ -2110,7 +2112,8 @@ define float @nofpclass_callsites(float %arg) {
21102112
; CHECK: attributes #48 = { allocsize(1,0) }
21112113
; CHECK: attributes #49 = { nosanitize_bounds }
21122114
; CHECK: attributes #50 = { allockind("alloc,uninitialized") }
2113-
; CHECK: attributes #51 = { builtin }
2115+
; CHECK: attributes #51 = { sanitize_numerical_stability }
2116+
; CHECK: attributes #52 = { builtin }
21142117

21152118
;; Metadata
21162119

0 commit comments

Comments
 (0)