1*8b360c69SBin Cheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*8b360c69SBin Cheng; RUN: opt -function-specialization -force-function-specialization -func-specialization-on-address -S < %s | FileCheck %s
3*8b360c69SBin Cheng
4*8b360c69SBin Cheng; Check that we don't crash and specialise on a scalar global variable with byval attribute.
5*8b360c69SBin Cheng
6*8b360c69SBin Cheng; CHECK-NOT: wombat.{{[0-9]+}}
7*8b360c69SBin Cheng
8*8b360c69SBin Cheng%struct.pluto = type { %struct.spam }
9*8b360c69SBin Cheng%struct.quux = type { i16 }
10*8b360c69SBin Cheng%struct.spam = type { i16 }
11*8b360c69SBin Cheng
12*8b360c69SBin Cheng@global.5 = external dso_local global i128
13*8b360c69SBin Cheng@global.12 = external global %struct.quux
14*8b360c69SBin Cheng
15*8b360c69SBin Chengdefine internal i16 @wobble(%struct.quux* %arg, i16 %arg1, i128* byval(i128) %arg2, %struct.quux* %arg3) {
16*8b360c69SBin Cheng; CHECK-LABEL: @wobble(
17*8b360c69SBin Cheng; CHECK-NEXT:  bb:
18*8b360c69SBin Cheng; CHECK-NEXT:    [[TMP34:%.*]] = bitcast i128* [[ARG2:%.*]] to i16*
19*8b360c69SBin Cheng; CHECK-NEXT:    unreachable
20*8b360c69SBin Cheng;
21*8b360c69SBin Chengbb:
22*8b360c69SBin Cheng  %tmp34 = bitcast i128* %arg2 to i16*
23*8b360c69SBin Cheng  unreachable
24*8b360c69SBin Cheng}
25*8b360c69SBin Cheng
26*8b360c69SBin Chengdefine internal i16 @snork() {
27*8b360c69SBin Cheng; CHECK-LABEL: @snork(
28*8b360c69SBin Cheng; CHECK-NEXT:  bb4:
29*8b360c69SBin Cheng; CHECK-NEXT:    [[TMP35:%.*]] = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12)
30*8b360c69SBin Cheng; CHECK-NEXT:    unreachable
31*8b360c69SBin Cheng;
32*8b360c69SBin Chengbb4:
33*8b360c69SBin Cheng  %tmp35 = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12)
34*8b360c69SBin Cheng  unreachable
35*8b360c69SBin Cheng}
36*8b360c69SBin Cheng
37*8b360c69SBin Chengdefine i16 @main() {
38*8b360c69SBin Cheng; CHECK-LABEL: @main(
39*8b360c69SBin Cheng; CHECK-NEXT:  bb:
40*8b360c69SBin Cheng; CHECK-NEXT:    [[TMP:%.*]] = call i16 @snork()
41*8b360c69SBin Cheng; CHECK-NEXT:    unreachable
42*8b360c69SBin Cheng;
43*8b360c69SBin Chengbb:
44*8b360c69SBin Cheng  %tmp = call i16 @snork()
45*8b360c69SBin Cheng  unreachable
46*8b360c69SBin Cheng}
47