mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
bf003e65ef
In the case where dfsan provides a custom wrapper for a function, shadow parameters are added for each parameter of the function. These parameters are i16s. For targets which do not consider this a legal type, the lack of sign extension information would cause LLVM to generate anyexts around their usage with phi variables and calling convention logic. Address this by introducing zero exts for each shadow parameter. Reviewers: pcc, slthakur Differential Revision: https://reviews.llvm.org/D33349 llvm-svn: 311087
55 lines
2.1 KiB
LLVM
55 lines
2.1 KiB
LLVM
; RUN: opt -mtriple=x86_64-unknown-linux-gnu < %s -dfsan -S --dfsan-abilist=%S/Inputs/shadow-args-abilist.txt | FileCheck %s
|
|
|
|
; REQUIRES: x86-registered-target
|
|
|
|
; Test that the custom abi marks shadow parameters as zero extended.
|
|
|
|
define i32 @m() {
|
|
entry:
|
|
%call = call zeroext i16 @dfsan_get_label(i64 signext 56)
|
|
%conv = zext i16 %call to i32
|
|
ret i32 %conv
|
|
}
|
|
|
|
; CHECK-LABEL: @"dfs$m"
|
|
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_dfsan_get_label(i64 signext 56, i16 zeroext 0, i16* %{{.*}})
|
|
|
|
define i32 @k() {
|
|
entry:
|
|
%call = call zeroext i16 @k2(i64 signext 56, i64 signext 67)
|
|
%conv = zext i16 %call to i32
|
|
ret i32 %conv
|
|
}
|
|
|
|
; CHECK-LABEL: @"dfs$k"
|
|
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_k2(i64 signext 56, i64 signext 67, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16* %{{.*}})
|
|
|
|
define i32 @k3() {
|
|
entry:
|
|
%call = call zeroext i16 @k4(i64 signext 56, i64 signext 67, i64 signext 78, i64 signext 89)
|
|
%conv = zext i16 %call to i32
|
|
ret i32 %conv
|
|
}
|
|
|
|
; CHECK-LABEL: @"dfs$k3"
|
|
; CHECK: %{{.*}} = call zeroext i16 @__dfsw_k4(i64 signext 56, i64 signext 67, i64 signext 78, i64 signext 89, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16 zeroext {{.*}}, i16* %{{.*}})
|
|
|
|
declare zeroext i16 @dfsan_get_label(i64 signext)
|
|
|
|
; CHECK-LABEL: @"dfsw$dfsan_get_label"
|
|
; CHECK: %{{.*}} = call i16 @__dfsw_dfsan_get_label(i64 %0, i16 zeroext %1, i16* %{{.*}})
|
|
|
|
declare zeroext i16 @k2(i64 signext, i64 signext)
|
|
; CHECK-LABEL: @"dfsw$k2"
|
|
; CHECK: %{{.*}} = call i16 @__dfsw_k2(i64 %{{.*}}, i64 %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16* %{{.*}})
|
|
|
|
declare zeroext i16 @k4(i64 signext, i64 signext, i64 signext, i64 signext)
|
|
|
|
; CHECK-LABEL: @"dfsw$k4"
|
|
; CHECK: %{{.*}} = call i16 @__dfsw_k4(i64 %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16 zeroext %{{.*}}, i16* %{{.*}})
|
|
|
|
|
|
; CHECK: declare zeroext i16 @__dfsw_dfsan_get_label(i64 signext, i16, i16*)
|
|
; CHECK: declare zeroext i16 @__dfsw_k2(i64 signext, i64 signext, i16, i16, i16*)
|
|
; CHECK: declare zeroext i16 @__dfsw_k4(i64 signext, i64 signext, i64 signext, i64 signext, i16, i16, i16, i16, i16*)
|