Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/test/Transforms/Inline/attributes.ll
Show All 16 Lines | |||||
define i32 @sanitize_thread_callee(i32 %i) sanitize_thread { | define i32 @sanitize_thread_callee(i32 %i) sanitize_thread { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
define i32 @sanitize_memory_callee(i32 %i) sanitize_memory { | define i32 @sanitize_memory_callee(i32 %i) sanitize_memory { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
define i32 @sanitize_memtag_callee(i32 %i) sanitize_memtag { | |||||
ret i32 %i | |||||
} | |||||
define i32 @safestack_callee(i32 %i) safestack { | define i32 @safestack_callee(i32 %i) safestack { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
define i32 @slh_callee(i32 %i) speculative_load_hardening { | define i32 @slh_callee(i32 %i) speculative_load_hardening { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
Show All 12 Lines | |||||
define i32 @alwaysinline_sanitize_thread_callee(i32 %i) alwaysinline sanitize_thread { | define i32 @alwaysinline_sanitize_thread_callee(i32 %i) alwaysinline sanitize_thread { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
define i32 @alwaysinline_sanitize_memory_callee(i32 %i) alwaysinline sanitize_memory { | define i32 @alwaysinline_sanitize_memory_callee(i32 %i) alwaysinline sanitize_memory { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
define i32 @alwaysinline_sanitize_memtag_callee(i32 %i) alwaysinline sanitize_memtag { | |||||
ret i32 %i | |||||
} | |||||
define i32 @alwaysinline_safestack_callee(i32 %i) alwaysinline safestack { | define i32 @alwaysinline_safestack_callee(i32 %i) alwaysinline safestack { | ||||
ret i32 %i | ret i32 %i | ||||
} | } | ||||
; Check that: | ; Check that: | ||||
; * noattr callee is inlined into noattr caller, | ; * noattr callee is inlined into noattr caller, | ||||
; * sanitize_(address|memory|thread) callee is not inlined into noattr caller, | ; * sanitize_(address|memory|thread) callee is not inlined into noattr caller, | ||||
Show All 38 Lines | define i32 @test_no_sanitize_thread(i32 %arg) { | ||||
%x3 = call i32 @alwaysinline_callee(i32 %x2) | %x3 = call i32 @alwaysinline_callee(i32 %x2) | ||||
%x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) | %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) | ||||
ret i32 %x4 | ret i32 %x4 | ||||
; CHECK-LABEL: @test_no_sanitize_thread( | ; CHECK-LABEL: @test_no_sanitize_thread( | ||||
; CHECK-NEXT: @sanitize_thread_callee | ; CHECK-NEXT: @sanitize_thread_callee | ||||
; CHECK-NEXT: ret i32 | ; CHECK-NEXT: ret i32 | ||||
} | } | ||||
define i32 @test_no_sanitize_memtag(i32 %arg) { | |||||
%x1 = call i32 @noattr_callee(i32 %arg) | |||||
%x2 = call i32 @sanitize_memtag_callee(i32 %x1) | |||||
%x3 = call i32 @alwaysinline_callee(i32 %x2) | |||||
%x4 = call i32 @alwaysinline_sanitize_memtag_callee(i32 %x3) | |||||
ret i32 %x4 | |||||
; CHECK-LABEL: @test_no_sanitize_memtag( | |||||
; CHECK-NEXT: @sanitize_memtag_callee | |||||
; CHECK-NEXT: ret i32 | |||||
} | |||||
; Check that: | ; Check that: | ||||
; * noattr callee is not inlined into sanitize_(address|memory|thread) caller, | ; * noattr callee is not inlined into sanitize_(address|memory|thread) caller, | ||||
; * sanitize_(address|memory|thread) callee is inlined into the caller with the same attribute, | ; * sanitize_(address|memory|thread) callee is inlined into the caller with the same attribute, | ||||
; * alwaysinline callee is always inlined no matter what sanitize_* attributes are present. | ; * alwaysinline callee is always inlined no matter what sanitize_* attributes are present. | ||||
define i32 @test_sanitize_address(i32 %arg) sanitize_address { | define i32 @test_sanitize_address(i32 %arg) sanitize_address { | ||||
%x1 = call i32 @noattr_callee(i32 %arg) | %x1 = call i32 @noattr_callee(i32 %arg) | ||||
Show All 34 Lines | define i32 @test_sanitize_thread(i32 %arg) sanitize_thread { | ||||
%x3 = call i32 @alwaysinline_callee(i32 %x2) | %x3 = call i32 @alwaysinline_callee(i32 %x2) | ||||
%x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) | %x4 = call i32 @alwaysinline_sanitize_thread_callee(i32 %x3) | ||||
ret i32 %x4 | ret i32 %x4 | ||||
; CHECK-LABEL: @test_sanitize_thread( | ; CHECK-LABEL: @test_sanitize_thread( | ||||
; CHECK-NEXT: @noattr_callee | ; CHECK-NEXT: @noattr_callee | ||||
; CHECK-NEXT: ret i32 | ; CHECK-NEXT: ret i32 | ||||
} | } | ||||
define i32 @test_sanitize_memtag(i32 %arg) sanitize_memtag { | |||||
%x1 = call i32 @noattr_callee(i32 %arg) | |||||
%x2 = call i32 @sanitize_memtag_callee(i32 %x1) | |||||
%x3 = call i32 @alwaysinline_callee(i32 %x2) | |||||
%x4 = call i32 @alwaysinline_sanitize_memtag_callee(i32 %x3) | |||||
ret i32 %x4 | |||||
; CHECK-LABEL: @test_sanitize_memtag( | |||||
; CHECK-NEXT: @noattr_callee | |||||
; CHECK-NEXT: ret i32 | |||||
} | |||||
define i32 @test_safestack(i32 %arg) safestack { | define i32 @test_safestack(i32 %arg) safestack { | ||||
%x1 = call i32 @noattr_callee(i32 %arg) | %x1 = call i32 @noattr_callee(i32 %arg) | ||||
%x2 = call i32 @safestack_callee(i32 %x1) | %x2 = call i32 @safestack_callee(i32 %x1) | ||||
%x3 = call i32 @alwaysinline_callee(i32 %x2) | %x3 = call i32 @alwaysinline_callee(i32 %x2) | ||||
%x4 = call i32 @alwaysinline_safestack_callee(i32 %x3) | %x4 = call i32 @alwaysinline_safestack_callee(i32 %x3) | ||||
ret i32 %x4 | ret i32 %x4 | ||||
; CHECK-LABEL: @test_safestack( | ; CHECK-LABEL: @test_safestack( | ||||
; CHECK-NEXT: @noattr_callee | ; CHECK-NEXT: @noattr_callee | ||||
▲ Show 20 Lines • Show All 254 Lines • Show Last 20 Lines |