brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · 6bf3a64 Raw
260 lines · plain
1; RUN: llc -o - %s | FileCheck %s2; Make sure RegAllocGreedy/SplitKit do not produce invalid liveness information3; and crash when splitting a liverange twice and rematerializing each time.4; (Sorry for the testcase; this was ran through bugpoint and then  manually5;  reduced for several hours but is still big...)6target triple = "thumbv7-apple-ios"7 8%struct.ham = type { %struct.wombat.0 }9%struct.wombat.0 = type { %struct.barney }10%struct.barney = type { %struct.snork.1 }11%struct.snork.1 = type { %struct.wobble.2 }12%struct.wobble.2 = type { %struct.blam }13%struct.blam = type { i32, i32, ptr }14%struct.ham.3 = type { %struct.pluto }15%struct.pluto = type { ptr, %struct.snork.5, %struct.wibble }16%struct.zot = type { ptr }17%struct.blam.4 = type <{ %struct.zot, ptr, ptr, i8, [3 x i8] }>18%struct.snork.5 = type { %struct.quux }19%struct.quux = type { %struct.zot }20%struct.wibble = type { %struct.widget }21%struct.widget = type { i32 }22%struct.bar = type { %struct.spam }23%struct.spam = type { ptr, %struct.wobble, %struct.zot.7 }24%struct.wobble = type { %struct.wibble.6 }25%struct.wibble.6 = type { %struct.zot }26%struct.zot.7 = type { %struct.ham.8 }27%struct.ham.8 = type { i32 }28%struct.hoge = type { %struct.ham, %struct.foo }29%struct.foo = type { float, float }30%struct.wombat = type { %struct.ham, float }31%struct.snork = type { %struct.ham.9, [11 x i8] }32%struct.ham.9 = type { i8 }33 34@global = external global i835@global.1 = private constant [20 x i8] c"aaaaaaaaaaaaaaaaaa0\00"36@global.2 = external constant [27 x i8]37@global.3 = external global %struct.ham38@global.4 = external constant [47 x i8]39@global.5 = external constant [61 x i8]40@global.6 = external constant [40 x i8]41@global.7 = external constant [24 x i8]42@global.8 = external constant [20 x i8]43@global.9 = external global %struct.ham44@global.10 = external global %struct.ham45@global.11 = external global %struct.ham46@global.12 = external global %struct.ham47@global.13 = external global %struct.ham48@global.14 = external global %struct.ham49@global.15 = external global %struct.ham50@global.16 = external global %struct.ham51@global.17 = external global %struct.ham52@global.18 = external constant [35 x i8]53@global.19 = external global %struct.ham54@global.20 = external constant [53 x i8]55@global.21 = external global %struct.ham56@global.22 = external global %struct.ham57@global.23 = external global %struct.ham58@global.24 = external constant [32 x i8]59@global.25 = external global %struct.ham60@global.26 = external constant [47 x i8]61@global.27 = external global %struct.ham62@global.28 = external constant [45 x i8]63@global.29 = external global %struct.ham64@global.30 = external global %struct.ham65@global.31 = external constant [24 x i8]66@global.32 = external global %struct.ham67@global.33 = external global %struct.ham68@global.34 = external global %struct.ham69@global.35 = external global %struct.ham70@global.36 = external constant [27 x i8]71@global.37 = external global %struct.ham72@global.38 = external constant [10 x i8]73@global.39 = external global %struct.ham74@global.40 = external global %struct.ham75@global.41 = external global %struct.ham76@global.42 = external global %struct.ham77@global.43 = external global %struct.ham78@global.44 = external constant [41 x i8]79@global.45 = external global %struct.ham80@global.46 = external global %struct.ham81@global.47 = external global %struct.ham82@global.48 = external global %struct.ham83@global.49 = external constant [52 x i8]84@global.50 = external constant [47 x i8]85@global.51 = external global %struct.ham86@global.52 = external global %struct.ham87@global.53 = external global %struct.ham88@global.54 = external global %struct.ham89@global.55 = external global %struct.ham.390@global.56 = external global %struct.bar91@global.57 = external global i892 93declare ptr @bar(ptr returned)94 95declare i32 @__cxa_atexit(ptr, ptr, ptr)96 97declare ptr @wobble(ptr returned, ptr )98 99declare i32 @quux(...)100 101declare ptr @_Znwm(i32)102 103declare i32 @wobble.58(ptr, [1 x i32], ptr , ptr )104 105declare i32 @widget(ptr, [1 x i32], ptr , ptr )106 107; Just check we didn't crash and did output something...108; CHECK-LABEL: func:109; CHECK: trap110define internal void @func() section "__TEXT,__StaticInit,regular,pure_instructions" personality ptr @quux {111  %tmp = tail call i32 @__cxa_atexit(ptr @bar, ptr @global.3, ptr @global) #0112  %tmp2 = invoke ptr @wobble(ptr undef, ptr  @global.9)113          to label %bb14 unwind label %bbunwind114 115bb14:116  %tmp15 = getelementptr  i8, ptr undef, i32 12117  store i8 0, ptr %tmp15118  %tmp16 = icmp eq i8 undef, 0119  br i1 %tmp16, label %bb28, label %bb18120 121bb18:122  br i1 undef, label %bb21, label %bb29123 124bb21:125  %tmp22 = call ptr @_Znwm(i32 16)126  store i32 17, ptr @global.10127  %tmp23 = call ptr @_Znwm(i32 32)128  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.2, i32 26, i1 false)129  store i32 33, ptr @global.11130  store i32 23, ptr getelementptr  (%struct.ham, ptr @global.11, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)131  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.7, i32 23, i1 false)132  %tmp24 = call i32 @__cxa_atexit(ptr @bar, ptr @global.11, ptr @global) #0133  store i32 49, ptr @global.12134  store i32 37, ptr getelementptr  (%struct.ham, ptr @global.13, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)135  call void @llvm.memset.p0.i32(ptr align 4 @global.14, i8 0, i32 12, i1 false)136  %tmp25 = call ptr @_Znwm(i32 48)137  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp25, ptr align 1 @global.6, i32 39, i1 false)138  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.4, i32 46, i1 false)139  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.5, i32 60, i1 false)140  %tmp26 = call ptr @_Znwm(i32 48)141  store i32 65, ptr @global.15142  %tmp27 = icmp eq i8 undef, 0143  br i1 %tmp27, label %bb30, label %bb33144 145bb28:146  call void @llvm.trap()147  unreachable148 149bb29:150  call void @llvm.trap()151  unreachable152 153bb30:154  %tmp31 = icmp eq i32 undef, 37155  br i1 %tmp31, label %bb32, label %bb30156 157bb32:158  store i8 1, ptr @global.57159  br label %bb33160 161bb33:162  %tmp34 = call ptr @_Znwm(i32 32)163  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.1, i32 19, i1 false)164  store i32 17, ptr @global.16165  store i32 65, ptr @global.17166  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.18, i32 34, i1 false)167  store i32 65, ptr @global.19168  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.20, i32 52, i1 false)169  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.8, i32 19, i1 false)170  store i32 37, ptr getelementptr  (%struct.ham, ptr @global.21, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)171  %tmp35 = call ptr @_Znwm(i32 32)172  store i8 16, ptr @global.22173  %tmp36 = call ptr @_Znwm(i32 32)174  store i32 31, ptr getelementptr  (%struct.ham, ptr @global.23, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)175  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp36, ptr align 1 @global.24, i32 31, i1 false)176  %tmp37 = getelementptr  i8, ptr %tmp36, i32 31177  store i8 0, ptr %tmp37178  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.26, i32 46, i1 false)179  %tmp38 = call i32 @__cxa_atexit(ptr @bar, ptr @global.25, ptr @global) #0180  %tmp39 = call ptr @_Znwm(i32 48)181  store i32 44, ptr getelementptr  (%struct.ham, ptr @global.27, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)182  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp39, ptr align 1 @global.28, i32 44, i1 false)183  %tmp40 = getelementptr  i8, ptr %tmp39, i32 44184  store i8 0, ptr %tmp40185  call void @llvm.memset.p0.i32(ptr align 4 @global.29, i8 0, i32 12, i1 false)186  %tmp41 = call ptr @_Znwm(i32 32)187  store i32 23, ptr getelementptr  (%struct.ham, ptr @global.30, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)188  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp41, ptr align 1 @global.31, i32 23, i1 false)189  %tmp42 = getelementptr  i8, ptr %tmp41, i32 23190  store i8 0, ptr %tmp42191  call void @llvm.memset.p0.i32(ptr align 4 @global.32, i8 0, i32 12, i1 false)192  store i8 16, ptr @global.32193  %tmp43 = call i32 @__cxa_atexit(ptr @bar, ptr @global.33, ptr @global) #0194  %tmp44 = call ptr @_Znwm(i32 16)195  call void @llvm.memset.p0.i32(ptr align 4 @global.34, i8 0, i32 12, i1 false)196  call void @llvm.memset.p0.i32(ptr align 4 @global.9, i8 0, i32 12, i1 false)197  %tmp45 = call ptr @_Znwm(i32 32)198  call void @llvm.memcpy.p0.p0.i32(ptr align 1 %tmp45, ptr align 1 @global.36, i32 26, i1 false)199  call void @llvm.memset.p0.i32(ptr align 4 @global.37, i8 0, i32 12, i1 false)200  call void @llvm.memcpy.p0.p0.i32(ptr align 1 getelementptr (%struct.snork, ptr @global.37, i32 0, i32 1, i32 0), ptr align 1 @global.38, i32 9, i1 false)201  store i32 17, ptr @global.39202  %tmp46 = call i32 @__cxa_atexit(ptr @bar, ptr @global.40, ptr @global) #0203  %tmp47 = call ptr @_Znwm(i32 32)204  %tmp48 = getelementptr  i8, ptr %tmp47, i32 21205  store i8 0, ptr %tmp48206  store i32 33, ptr @global.41207  store i32 15, ptr getelementptr  (%struct.ham, ptr @global.42, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)208  %tmp49 = call i32 @__cxa_atexit(ptr @bar, ptr @global.43, ptr @global) #0209  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.44, i32 40, i1 false)210  %tmp50 = call i32 @__cxa_atexit(ptr @bar, ptr @global.45, ptr @global) #0211  %tmp51 = call i32 @__cxa_atexit(ptr @bar, ptr @global.46, ptr @global) #0212  %tmp52 = call ptr @_Znwm(i32 32)213  store ptr %tmp52, ptr getelementptr  (%struct.ham, ptr @global.47, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2)214  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.49, i32 51, i1 false)215  %tmp53 = call i32 @__cxa_atexit(ptr @bar, ptr @global.48, ptr @global) #0216  call void @llvm.memcpy.p0.p0.i32(ptr align 1 undef, ptr align 1 @global.50, i32 46, i1 false)217  store i32 33, ptr @global.51218  store i32 37, ptr getelementptr  (%struct.ham, ptr @global.52, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1)219  %tmp54 = invoke ptr @wobble(ptr undef, ptr  @global.54)220          to label %bb58 unwind label %bbunwind221 222bb58:223  %tmp59 = invoke i32 @wobble.58(ptr @global.55, [1 x i32] [i32 ptrtoint (ptr getelementptr  (%struct.ham.3, ptr @global.55, i32 0, i32 0, i32 1, i32 0, i32 0) to i32)], ptr  undef, ptr  undef)224          to label %bb71 unwind label %bbunwind225 226bb71:227  %tmp72 = invoke i32 @widget(ptr @global.56, [1 x i32] [i32 ptrtoint (ptr getelementptr  (%struct.bar, ptr @global.56, i32 0, i32 0, i32 1, i32 0, i32 0) to i32)], ptr  undef, ptr  undef)228          to label %bb73 unwind label %bbunwind229 230bb73:231  ret void232 233bbunwind:234  %tmp75 = landingpad { ptr, i32 }235          cleanup236  resume { ptr, i32 } undef237}238 239; CHECK-LABEL: func_reduced_remat_regclass_error:240define void @func_reduced_remat_regclass_error(ptr %global.10, ptr %global.15) {241bb14:242  store i32 999, ptr %global.10, align 4243  call void @llvm.memset.p0.i32(ptr null, i8 0, i32 12, i1 false)244  call void @llvm.memcpy.p0.p0.i32(ptr null, ptr null, i32 60, i1 false)245  %tmp34 = call ptr @_Znwm()246  store i32 999, ptr %global.15, align 4247  call void @llvm.memcpy.p0.p0.i32(ptr %global.10, ptr null, i32 52, i1 false)248  call void @llvm.memset.p0.i32(ptr null, i8 0, i32 12, i1 false)249  call void @llvm.memset.p0.i32(ptr null, i8 0, i32 12, i1 false)250  ret void251}252 253declare void @llvm.trap()254 255declare void @llvm.memcpy.p0.p0.i32(ptr , ptr , i32, i1)256 257declare void @llvm.memset.p0.i32(ptr , i8, i32, i1)258 259attributes #0 = { nounwind }260