| Wei Mi | 9a16d65 | 2016-04-13 03:08:27 +0000 | [diff] [blame] | 1 | ; RUN: llc -verify-regalloc < %s |
| 2 | ; PR27275: When enabling remat for vreg defined by PHIs, make sure the update |
| 3 | ; of the live range removes dead phi. Otherwise, we may end up with PHIs with |
| 4 | ; incorrect operands and that will trigger assertions or verifier failures |
| 5 | ; in later passes. |
| 6 | |
| 7 | target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" |
| 8 | target triple = "thumbv7-apple-ios9.0.0" |
| 9 | |
| 10 | %class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326 = type { %class.MockTransportClientSocketPool.0.225.275.1300.2325, i32 } |
| 11 | %class.MockTransportClientSocketPool.0.225.275.1300.2325 = type { i8 } |
| 12 | %class.StaticSocketDataProvider.6.231.281.1306.2331 = type { i8, %struct.MockConnect.5.230.280.1305.2330 } |
| 13 | %struct.MockConnect.5.230.280.1305.2330 = type { %class.IPEndPoint.4.229.279.1304.2329 } |
| 14 | %class.IPEndPoint.4.229.279.1304.2329 = type { %class.IPAddress.3.228.278.1303.2328 } |
| 15 | %class.IPAddress.3.228.278.1303.2328 = type { %"class.(anonymous namespace)::vector.2.227.277.1302.2327" } |
| 16 | %"class.(anonymous namespace)::vector.2.227.277.1302.2327" = type { i8 } |
| 17 | %class.TestCompletionCallback.9.234.284.1309.2334 = type { %class.TestCompletionCallbackTemplate.8.233.283.1308.2333, i32 } |
| 18 | %class.TestCompletionCallbackTemplate.8.233.283.1308.2333 = type { i32 } |
| 19 | %class.AssertionResult.24.249.299.1324.2349 = type { i8, %class.scoped_ptr.23.248.298.1323.2348 } |
| 20 | %class.scoped_ptr.23.248.298.1323.2348 = type { %class.Trans_NS___1_basic_string.18.243.293.1318.2343* } |
| 21 | %class.Trans_NS___1_basic_string.18.243.293.1318.2343 = type { %class.Trans_NS___1___libcpp_compressed_pair_imp.17.242.292.1317.2342 } |
| 22 | %class.Trans_NS___1___libcpp_compressed_pair_imp.17.242.292.1317.2342 = type { %"struct.Trans_NS___1_basic_string<char, int, int>::__rep.16.241.291.1316.2341" } |
| 23 | %"struct.Trans_NS___1_basic_string<char, int, int>::__rep.16.241.291.1316.2341" = type { %"struct.Trans_NS___1_basic_string<char, int, int>::__long.15.240.290.1315.2340" } |
| 24 | %"struct.Trans_NS___1_basic_string<char, int, int>::__long.15.240.290.1315.2340" = type { i64, i32 } |
| 25 | %class.AssertHelper.10.235.285.1310.2335 = type { i8 } |
| 26 | %class.Message.13.238.288.1313.2338 = type { %class.scoped_ptr.0.12.237.287.1312.2337 } |
| 27 | %class.scoped_ptr.0.12.237.287.1312.2337 = type { %"class.(anonymous namespace)::basic_stringstream.11.236.286.1311.2336"* } |
| 28 | %"class.(anonymous namespace)::basic_stringstream.11.236.286.1311.2336" = type { i8 } |
| 29 | %class.scoped_refptr.19.244.294.1319.2344 = type { i8 } |
| 30 | %class.BoundNetLog.20.245.295.1320.2345 = type { i32 } |
| 31 | %struct.MockReadWrite.7.232.282.1307.2332 = type { i32 } |
| 32 | %"class.(anonymous namespace)::basic_iostream.22.247.297.1322.2347" = type { i8 } |
| 33 | %class.ClientSocketHandle.14.239.289.1314.2339 = type { i8 } |
| 34 | %"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346" = type { i8 } |
| 35 | |
| 36 | @.str = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 |
| 37 | |
| 38 | define void @_ZN53SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test6m_fn10Ev(%class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326* %this) align 2 { |
| 39 | entry: |
| 40 | %socket_data = alloca %class.StaticSocketDataProvider.6.231.281.1306.2331, align 1 |
| 41 | %agg.tmp = alloca %struct.MockConnect.5.230.280.1305.2330, align 1 |
| 42 | %callback = alloca %class.TestCompletionCallback.9.234.284.1309.2334, align 4 |
| 43 | %gtest_ar = alloca %class.AssertionResult.24.249.299.1324.2349, align 4 |
| 44 | %temp.lvalue = alloca %class.AssertHelper.10.235.285.1310.2335, align 1 |
| 45 | %agg.tmp10 = alloca %class.Message.13.238.288.1313.2338, align 4 |
| 46 | %ref.tmp = alloca %class.Trans_NS___1_basic_string.18.243.293.1318.2343, align 4 |
| 47 | %agg.tmp16 = alloca %class.scoped_refptr.19.244.294.1319.2344, align 1 |
| 48 | %agg.tmp18 = alloca %class.BoundNetLog.20.245.295.1320.2345, align 4 |
| 49 | %call2 = call %class.StaticSocketDataProvider.6.231.281.1306.2331* @_ZN24StaticSocketDataProviderC1EP13MockReadWritejS1_j(%class.StaticSocketDataProvider.6.231.281.1306.2331* nonnull %socket_data, %struct.MockReadWrite.7.232.282.1307.2332* undef, i32 1, %struct.MockReadWrite.7.232.282.1307.2332* null, i32 0) |
| 50 | %call3 = call %struct.MockConnect.5.230.280.1305.2330* @_ZN11MockConnectC1Ev(%struct.MockConnect.5.230.280.1305.2330* nonnull %agg.tmp) |
| 51 | call void @_ZN24StaticSocketDataProvider5m_fn8E11MockConnect(%class.StaticSocketDataProvider.6.231.281.1306.2331* nonnull %socket_data, %struct.MockConnect.5.230.280.1305.2330* nonnull %agg.tmp) |
| 52 | %call5 = call %class.TestCompletionCallback.9.234.284.1309.2334* @_ZN22TestCompletionCallbackC1Ev(%class.TestCompletionCallback.9.234.284.1309.2334* nonnull %callback) |
| 53 | %transport_socket_pool_ = getelementptr inbounds %class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326, %class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326* %this, i32 0, i32 0 |
| 54 | %call6 = call i32 @_ZN29MockTransportClientSocketPool5m_fn9Ev(%class.MockTransportClientSocketPool.0.225.275.1300.2325* %transport_socket_pool_) |
| 55 | call void @_Z11CmpHelperEQPcS_xx(%class.AssertionResult.24.249.299.1324.2349* nonnull sret %gtest_ar, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i64 0, i64 undef) |
| 56 | %tmp = load i8, i8* undef, align 4 |
| 57 | %tobool.i = icmp eq i8 %tmp, 0 |
| 58 | br i1 %tobool.i, label %if.else, label %if.end |
| 59 | |
| 60 | if.else: ; preds = %entry |
| 61 | br i1 undef, label %_ZN15AssertionResult5m_fn6Ev.exit, label %cond.true.i |
| 62 | |
| 63 | cond.true.i: ; preds = %if.else |
| 64 | %call4.i = call i8* @_ZN25Trans_NS___1_basic_stringIciiE5m_fn1Ev(%class.Trans_NS___1_basic_string.18.243.293.1318.2343* nonnull undef) |
| 65 | br label %_ZN15AssertionResult5m_fn6Ev.exit |
| 66 | |
| 67 | _ZN15AssertionResult5m_fn6Ev.exit: ; preds = %cond.true.i, %if.else |
| 68 | %cond.i = phi i8* [ %call4.i, %cond.true.i ], [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), %if.else ] |
| 69 | %call9 = call %class.AssertHelper.10.235.285.1310.2335* @_ZN12AssertHelperC1EPKc(%class.AssertHelper.10.235.285.1310.2335* nonnull %temp.lvalue, i8* %cond.i) |
| 70 | %call11 = call %class.Message.13.238.288.1313.2338* @_ZN7MessageC1Ev(%class.Message.13.238.288.1313.2338* nonnull %agg.tmp10) |
| 71 | call void @_ZN12AssertHelperaSE7Message(%class.AssertHelper.10.235.285.1310.2335* nonnull %temp.lvalue, %class.Message.13.238.288.1313.2338* nonnull %agg.tmp10) |
| 72 | %call.i.i.i.i27 = call zeroext i1 @_Z6IsTruev() |
| 73 | %brmerge = or i1 false, undef |
| 74 | br i1 %brmerge, label %_ZN7MessageD1Ev.exit33, label %delete.notnull.i.i.i.i32 |
| 75 | |
| 76 | delete.notnull.i.i.i.i32: ; preds = %_ZN15AssertionResult5m_fn6Ev.exit |
| 77 | %call.i.i.i.i.i.i31 = call %"class.(anonymous namespace)::basic_iostream.22.247.297.1322.2347"* @_ZN12_GLOBAL__N_114basic_iostreamD2Ev(%"class.(anonymous namespace)::basic_iostream.22.247.297.1322.2347"* undef) |
| 78 | call void @_ZdlPv(i8* undef) |
| 79 | br label %_ZN7MessageD1Ev.exit33 |
| 80 | |
| 81 | _ZN7MessageD1Ev.exit33: ; preds = %delete.notnull.i.i.i.i32, %_ZN15AssertionResult5m_fn6Ev.exit |
| 82 | %call13 = call %class.AssertHelper.10.235.285.1310.2335* @_ZN12AssertHelperD1Ev(%class.AssertHelper.10.235.285.1310.2335* nonnull %temp.lvalue) |
| 83 | br label %if.end |
| 84 | |
| 85 | if.end: ; preds = %_ZN7MessageD1Ev.exit33, %entry |
| 86 | %message_.i.i = getelementptr inbounds %class.AssertionResult.24.249.299.1324.2349, %class.AssertionResult.24.249.299.1324.2349* %gtest_ar, i32 0, i32 1 |
| 87 | %call.i.i.i = call %class.scoped_ptr.23.248.298.1323.2348* @_ZN10scoped_ptrI25Trans_NS___1_basic_stringIciiEED2Ev(%class.scoped_ptr.23.248.298.1323.2348* %message_.i.i) |
| 88 | call void @llvm.memset.p0i8.i32(i8* null, i8 0, i32 12, i32 4, i1 false) |
| 89 | call void @_ZN25Trans_NS___1_basic_stringIciiE5m_fn2Ev(%class.Trans_NS___1_basic_string.18.243.293.1318.2343* nonnull %ref.tmp) |
| 90 | call void @_Z19CreateSOCKSv5Paramsv(%class.scoped_refptr.19.244.294.1319.2344* nonnull sret %agg.tmp16) |
| 91 | %callback_.i = getelementptr inbounds %class.TestCompletionCallback.9.234.284.1309.2334, %class.TestCompletionCallback.9.234.284.1309.2334* %callback, i32 0, i32 1 |
| 92 | %pool_ = getelementptr inbounds %class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326, %class.SOCKSClientSocketPoolTest_AsyncSOCKSConnectError_Test.1.226.276.1301.2326* %this, i32 0, i32 1 |
| 93 | %tmp1 = getelementptr inbounds %class.BoundNetLog.20.245.295.1320.2345, %class.BoundNetLog.20.245.295.1320.2345* %agg.tmp18, i32 0, i32 0 |
| 94 | store i32 0, i32* %tmp1, align 4 |
| 95 | call void @_ZN18ClientSocketHandle5m_fn3IPiEEvRK25Trans_NS___1_basic_stringIciiE13scoped_refptr15RequestPriorityN16ClientSocketPool13RespectLimitsERiT_11BoundNetLog(%class.ClientSocketHandle.14.239.289.1314.2339* nonnull undef, %class.Trans_NS___1_basic_string.18.243.293.1318.2343* nonnull dereferenceable(12) %ref.tmp, %class.scoped_refptr.19.244.294.1319.2344* nonnull %agg.tmp16, i32 0, i32 1, i32* nonnull dereferenceable(4) %callback_.i, i32* %pool_, %class.BoundNetLog.20.245.295.1320.2345* nonnull %agg.tmp18) |
| 96 | %call19 = call %class.BoundNetLog.20.245.295.1320.2345* @_ZN11BoundNetLogD1Ev(%class.BoundNetLog.20.245.295.1320.2345* nonnull %agg.tmp18) |
| 97 | call void @_Z11CmpHelperEQPcS_xx(%class.AssertionResult.24.249.299.1324.2349* nonnull sret undef, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i64 -1, i64 0) |
| 98 | br i1 undef, label %if.then.i.i.i.i, label %_ZN7MessageD1Ev.exit |
| 99 | |
| 100 | if.then.i.i.i.i: ; preds = %if.end |
| 101 | %tmp2 = load %"class.(anonymous namespace)::basic_stringstream.11.236.286.1311.2336"*, %"class.(anonymous namespace)::basic_stringstream.11.236.286.1311.2336"** undef, align 4 |
| 102 | br label %_ZN7MessageD1Ev.exit |
| 103 | |
| 104 | _ZN7MessageD1Ev.exit: ; preds = %if.then.i.i.i.i, %if.end |
| 105 | %connect_.i.i = getelementptr inbounds %class.StaticSocketDataProvider.6.231.281.1306.2331, %class.StaticSocketDataProvider.6.231.281.1306.2331* %socket_data, i32 0, i32 1 |
| 106 | %tmp3 = bitcast %struct.MockConnect.5.230.280.1305.2330* %connect_.i.i to %"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346"* |
| 107 | %call.i.i.i.i.i.i.i.i.i.i = call %"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346"* @_ZN12_GLOBAL__N_113__vector_baseD2Ev(%"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346"* %tmp3) |
| 108 | ret void |
| 109 | } |
| 110 | |
| 111 | ; Function Attrs: argmemonly nounwind |
| 112 | declare void @llvm.lifetime.start(i64, i8* nocapture) #0 |
| 113 | |
| 114 | declare %class.StaticSocketDataProvider.6.231.281.1306.2331* @_ZN24StaticSocketDataProviderC1EP13MockReadWritejS1_j(%class.StaticSocketDataProvider.6.231.281.1306.2331* returned, %struct.MockReadWrite.7.232.282.1307.2332*, i32, %struct.MockReadWrite.7.232.282.1307.2332*, i32) unnamed_addr |
| 115 | |
| 116 | declare void @_ZN24StaticSocketDataProvider5m_fn8E11MockConnect(%class.StaticSocketDataProvider.6.231.281.1306.2331*, %struct.MockConnect.5.230.280.1305.2330*) |
| 117 | |
| 118 | declare %struct.MockConnect.5.230.280.1305.2330* @_ZN11MockConnectC1Ev(%struct.MockConnect.5.230.280.1305.2330* returned) unnamed_addr |
| 119 | |
| 120 | declare %class.TestCompletionCallback.9.234.284.1309.2334* @_ZN22TestCompletionCallbackC1Ev(%class.TestCompletionCallback.9.234.284.1309.2334* returned) unnamed_addr |
| 121 | |
| 122 | declare i32 @_ZN29MockTransportClientSocketPool5m_fn9Ev(%class.MockTransportClientSocketPool.0.225.275.1300.2325*) |
| 123 | |
| 124 | declare %class.AssertHelper.10.235.285.1310.2335* @_ZN12AssertHelperC1EPKc(%class.AssertHelper.10.235.285.1310.2335* returned, i8*) unnamed_addr |
| 125 | |
| 126 | declare void @_ZN12AssertHelperaSE7Message(%class.AssertHelper.10.235.285.1310.2335*, %class.Message.13.238.288.1313.2338*) |
| 127 | |
| 128 | declare %class.Message.13.238.288.1313.2338* @_ZN7MessageC1Ev(%class.Message.13.238.288.1313.2338* returned) unnamed_addr |
| 129 | |
| 130 | declare %class.AssertHelper.10.235.285.1310.2335* @_ZN12AssertHelperD1Ev(%class.AssertHelper.10.235.285.1310.2335* returned) unnamed_addr |
| 131 | |
| 132 | ; Function Attrs: argmemonly nounwind |
| 133 | declare void @llvm.lifetime.end(i64, i8* nocapture) #0 |
| 134 | |
| 135 | declare void @_ZN18ClientSocketHandle5m_fn3IPiEEvRK25Trans_NS___1_basic_stringIciiE13scoped_refptr15RequestPriorityN16ClientSocketPool13RespectLimitsERiT_11BoundNetLog(%class.ClientSocketHandle.14.239.289.1314.2339*, %class.Trans_NS___1_basic_string.18.243.293.1318.2343* dereferenceable(12), %class.scoped_refptr.19.244.294.1319.2344*, i32, i32, i32* dereferenceable(4), i32*, %class.BoundNetLog.20.245.295.1320.2345*) |
| 136 | |
| 137 | declare void @_Z19CreateSOCKSv5Paramsv(%class.scoped_refptr.19.244.294.1319.2344* sret) |
| 138 | |
| 139 | ; Function Attrs: argmemonly nounwind |
| 140 | declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) #0 |
| 141 | |
| 142 | declare %class.BoundNetLog.20.245.295.1320.2345* @_ZN11BoundNetLogD1Ev(%class.BoundNetLog.20.245.295.1320.2345* returned) unnamed_addr |
| 143 | |
| 144 | declare %class.scoped_refptr.19.244.294.1319.2344* @_ZN13scoped_refptrD1Ev(%class.scoped_refptr.19.244.294.1319.2344* returned) unnamed_addr |
| 145 | |
| 146 | declare %"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346"* @_ZN12_GLOBAL__N_113__vector_baseD2Ev(%"class.(anonymous namespace)::__vector_base.21.246.296.1321.2346"* returned) unnamed_addr |
| 147 | |
| 148 | declare i8* @_ZN25Trans_NS___1_basic_stringIciiE5m_fn1Ev(%class.Trans_NS___1_basic_string.18.243.293.1318.2343*) |
| 149 | |
| 150 | declare zeroext i1 @_Z6IsTruev() |
| 151 | |
| 152 | declare void @_ZdlPv(i8*) |
| 153 | |
| 154 | declare %"class.(anonymous namespace)::basic_iostream.22.247.297.1322.2347"* @_ZN12_GLOBAL__N_114basic_iostreamD2Ev(%"class.(anonymous namespace)::basic_iostream.22.247.297.1322.2347"* returned) unnamed_addr |
| 155 | |
| 156 | declare %class.scoped_ptr.23.248.298.1323.2348* @_ZN10scoped_ptrI25Trans_NS___1_basic_stringIciiEED2Ev(%class.scoped_ptr.23.248.298.1323.2348* readonly returned) unnamed_addr align 2 |
| 157 | |
| 158 | declare void @_Z11CmpHelperEQPcS_xx(%class.AssertionResult.24.249.299.1324.2349* sret, i8*, i8*, i64, i64) |
| 159 | |
| 160 | declare void @_ZN25Trans_NS___1_basic_stringIciiE5m_fn2Ev(%class.Trans_NS___1_basic_string.18.243.293.1318.2343*) |
| 161 | |
| 162 | attributes #0 = { argmemonly nounwind } |