Files
clang-p2996/llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression5.ll
Bin Cheng 8b360c69e9 [FuncSpec]Fix assertion failure when value is not added to solver
This patch improves the fix in D110529 to prevent from crashing on value
with byval attribute that is not added in SCCP solver.

Authored-by: sinan.lin@linux.alibaba.com
Reviewed By: ChuanqiXu

Differential Revision: https://reviews.llvm.org/D126355
2022-06-10 18:45:53 +08:00

47 lines
1.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -function-specialization -force-function-specialization -func-specialization-on-address -S < %s | FileCheck %s
; Check that we don't crash and specialise on a scalar global variable with byval attribute.
; CHECK-NOT: wombat.{{[0-9]+}}
%struct.pluto = type { %struct.spam }
%struct.quux = type { i16 }
%struct.spam = type { i16 }
@global.5 = external dso_local global i128
@global.12 = external global %struct.quux
define internal i16 @wobble(%struct.quux* %arg, i16 %arg1, i128* byval(i128) %arg2, %struct.quux* %arg3) {
; CHECK-LABEL: @wobble(
; CHECK-NEXT: bb:
; CHECK-NEXT: [[TMP34:%.*]] = bitcast i128* [[ARG2:%.*]] to i16*
; CHECK-NEXT: unreachable
;
bb:
%tmp34 = bitcast i128* %arg2 to i16*
unreachable
}
define internal i16 @snork() {
; CHECK-LABEL: @snork(
; CHECK-NEXT: bb4:
; CHECK-NEXT: [[TMP35:%.*]] = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12)
; CHECK-NEXT: unreachable
;
bb4:
%tmp35 = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12)
unreachable
}
define i16 @main() {
; CHECK-LABEL: @main(
; CHECK-NEXT: bb:
; CHECK-NEXT: [[TMP:%.*]] = call i16 @snork()
; CHECK-NEXT: unreachable
;
bb:
%tmp = call i16 @snork()
unreachable
}