brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 5e597c9 Raw
143 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i32 @test_ptrauth_call_sign(ptr %p) {5; CHECK-LABEL: @test_ptrauth_call_sign(6; CHECK-NEXT:    [[V3:%.*]] = call i32 [[P:%.*]]()7; CHECK-NEXT:    ret i32 [[V3]]8;9  %v0 = ptrtoint ptr %p to i6410  %v1 = call i64 @llvm.ptrauth.sign(i64 %v0, i32 2, i64 5678)11  %v2 = inttoptr i64 %v1 to ptr12  %v3 = call i32 %v2() [ "ptrauth"(i32 2, i64 5678) ]13  ret i32 %v314}15 16define i32 @test_ptrauth_call_sign_otherbundle(ptr %p) {17; CHECK-LABEL: @test_ptrauth_call_sign_otherbundle(18; CHECK-NEXT:    [[V3:%.*]] = call i32 [[P:%.*]]() [ "somebundle"(ptr null), "otherbundle"(i64 0) ]19; CHECK-NEXT:    ret i32 [[V3]]20;21  %v0 = ptrtoint ptr %p to i6422  %v1 = call i64 @llvm.ptrauth.sign(i64 %v0, i32 2, i64 5678)23  %v2 = inttoptr i64 %v1 to ptr24  %v3 = call i32 %v2() [ "somebundle"(ptr null), "ptrauth"(i32 2, i64 5678), "otherbundle"(i64 0) ]25  ret i32 %v326}27 28define i32 @test_ptrauth_call_resign(ptr %p) {29; CHECK-LABEL: @test_ptrauth_call_resign(30; CHECK-NEXT:    [[V3:%.*]] = call i32 [[P:%.*]]() [ "ptrauth"(i32 1, i64 1234) ]31; CHECK-NEXT:    ret i32 [[V3]]32;33  %v0 = ptrtoint ptr %p to i6434  %v1 = call i64 @llvm.ptrauth.resign(i64 %v0, i32 1, i64 1234, i32 1, i64 5678)35  %v2 = inttoptr i64 %v1 to ptr36  %v3 = call i32 %v2() [ "ptrauth"(i32 1, i64 5678) ]37  ret i32 %v338}39 40define i32 @test_ptrauth_call_resign_blend(ptr %pp) {41; CHECK-LABEL: @test_ptrauth_call_resign_blend(42; CHECK-NEXT:    [[V01:%.*]] = load ptr, ptr [[PP:%.*]], align 843; CHECK-NEXT:    [[V6:%.*]] = call i32 [[V01]]() [ "ptrauth"(i32 1, i64 1234) ]44; CHECK-NEXT:    ret i32 [[V6]]45;46  %v0 = load ptr, ptr %pp, align 847  %v1 = ptrtoint ptr %pp to i6448  %v2 = ptrtoint ptr %v0 to i6449  %v3 = call i64 @llvm.ptrauth.blend(i64 %v1, i64 5678)50  %v4 = call i64 @llvm.ptrauth.resign(i64 %v2, i32 1, i64 1234, i32 1, i64 %v3)51  %v5 = inttoptr i64 %v4 to ptr52  %v6 = call i32 %v5() [ "ptrauth"(i32 1, i64 %v3) ]53  ret i32 %v654}55 56define i32 @test_ptrauth_call_resign_blend_2(ptr %pp) {57; CHECK-LABEL: @test_ptrauth_call_resign_blend_2(58; CHECK-NEXT:    [[V01:%.*]] = load ptr, ptr [[PP:%.*]], align 859; CHECK-NEXT:    [[V1:%.*]] = ptrtoint ptr [[PP]] to i6460; CHECK-NEXT:    [[V3:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[V1]], i64 5678)61; CHECK-NEXT:    [[V6:%.*]] = call i32 [[V01]]() [ "ptrauth"(i32 0, i64 [[V3]]) ]62; CHECK-NEXT:    ret i32 [[V6]]63;64  %v0 = load ptr, ptr %pp, align 865  %v1 = ptrtoint ptr %pp to i6466  %v2 = ptrtoint ptr %v0 to i6467  %v3 = call i64 @llvm.ptrauth.blend(i64 %v1, i64 5678)68  %v4 = call i64 @llvm.ptrauth.resign(i64 %v2, i32 0, i64 %v3, i32 0, i64 1234)69  %v5 = inttoptr i64 %v4 to ptr70  %v6 = call i32 %v5() [ "ptrauth"(i32 0, i64 1234) ]71  ret i32 %v672}73 74define i32 @test_ptrauth_call_resign_mismatch_key(ptr %p) {75; CHECK-LABEL: @test_ptrauth_call_resign_mismatch_key(76; CHECK-NEXT:    [[V0:%.*]] = ptrtoint ptr [[P:%.*]] to i6477; CHECK-NEXT:    [[V1:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[V0]], i32 1, i64 1234, i32 0, i64 5678)78; CHECK-NEXT:    [[V2:%.*]] = inttoptr i64 [[V1]] to ptr79; CHECK-NEXT:    [[V3:%.*]] = call i32 [[V2]]() [ "ptrauth"(i32 1, i64 5678) ]80; CHECK-NEXT:    ret i32 [[V3]]81;82  %v0 = ptrtoint ptr %p to i6483  %v1 = call i64 @llvm.ptrauth.resign(i64 %v0, i32 1, i64 1234, i32 0, i64 5678)84  %v2 = inttoptr i64 %v1 to ptr85  %v3 = call i32 %v2() [ "ptrauth"(i32 1, i64 5678) ]86  ret i32 %v387}88 89define i32 @test_ptrauth_call_resign_mismatch_disc(ptr %p) {90; CHECK-LABEL: @test_ptrauth_call_resign_mismatch_disc(91; CHECK-NEXT:    [[V0:%.*]] = ptrtoint ptr [[P:%.*]] to i6492; CHECK-NEXT:    [[V1:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[V0]], i32 1, i64 1234, i32 0, i64 9900)93; CHECK-NEXT:    [[V2:%.*]] = inttoptr i64 [[V1]] to ptr94; CHECK-NEXT:    [[V3:%.*]] = call i32 [[V2]]() [ "ptrauth"(i32 1, i64 5678) ]95; CHECK-NEXT:    ret i32 [[V3]]96;97  %v0 = ptrtoint ptr %p to i6498  %v1 = call i64 @llvm.ptrauth.resign(i64 %v0, i32 1, i64 1234, i32 0, i64 9900)99  %v2 = inttoptr i64 %v1 to ptr100  %v3 = call i32 %v2() [ "ptrauth"(i32 1, i64 5678) ]101  ret i32 %v3102}103 104define i32 @test_ptrauth_call_resign_mismatch_blend(ptr %pp) {105; CHECK-LABEL: @test_ptrauth_call_resign_mismatch_blend(106; CHECK-NEXT:    [[V0:%.*]] = load ptr, ptr [[PP:%.*]], align 8107; CHECK-NEXT:    [[V1:%.*]] = ptrtoint ptr [[PP]] to i64108; CHECK-NEXT:    [[V2:%.*]] = ptrtoint ptr [[V0]] to i64109; CHECK-NEXT:    [[V6:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[V1]], i64 5678)110; CHECK-NEXT:    [[V4:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[V2]], i32 1, i64 1234, i32 1, i64 [[V6]])111; CHECK-NEXT:    [[V5:%.*]] = inttoptr i64 [[V4]] to ptr112; CHECK-NEXT:    [[V3:%.*]] = call i32 [[V5]]() [ "ptrauth"(i32 1, i64 [[V1]]) ]113; CHECK-NEXT:    ret i32 [[V3]]114;115  %v0 = load ptr, ptr %pp, align 8116  %v1 = ptrtoint ptr %pp to i64117  %v2 = ptrtoint ptr %v0 to i64118  %v3 = call i64 @llvm.ptrauth.blend(i64 %v1, i64 5678)119  %v4 = call i64 @llvm.ptrauth.resign(i64 %v2, i32 1, i64 1234, i32 1, i64 %v3)120  %v5 = inttoptr i64 %v4 to ptr121  %v6 = call i32 %v5() [ "ptrauth"(i32 1, i64 %v1) ]122  ret i32 %v6123}124 125define i32 @test_ptrauth_call_resign_changing_call_key(ptr %p) {126; CHECK-LABEL: @test_ptrauth_call_resign_changing_call_key(127; CHECK-NEXT:    [[V0:%.*]] = ptrtoint ptr [[P:%.*]] to i64128; CHECK-NEXT:    [[V1:%.*]] = call i64 @llvm.ptrauth.resign(i64 [[V0]], i32 2, i64 1234, i32 1, i64 5678)129; CHECK-NEXT:    [[V2:%.*]] = inttoptr i64 [[V1]] to ptr130; CHECK-NEXT:    [[V3:%.*]] = call i32 [[V2]]() [ "ptrauth"(i32 1, i64 5678) ]131; CHECK-NEXT:    ret i32 [[V3]]132;133  %v0 = ptrtoint ptr %p to i64134  %v1 = call i64 @llvm.ptrauth.resign(i64 %v0, i32 2, i64 1234, i32 1, i64 5678)135  %v2 = inttoptr i64 %v1 to ptr136  %v3 = call i32 %v2() [ "ptrauth"(i32 1, i64 5678) ]137  ret i32 %v3138}139 140declare i64 @llvm.ptrauth.sign(i64, i32, i64)141declare i64 @llvm.ptrauth.resign(i64, i32, i64, i32, i64)142declare i64 @llvm.ptrauth.blend(i64, i64)143