|
1004 | 1004 | ) |
1005 | 1005 | ) |
1006 | 1006 |
|
| 1007 | + ;; CHECK: (func $global-with-get (type $15) (result i32) |
| 1008 | + ;; CHECK-NEXT: (local $tmp i32) |
| 1009 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1010 | + ;; CHECK-NEXT: (i32.const 10) |
| 1011 | + ;; CHECK-NEXT: ) |
| 1012 | + ;; CHECK-NEXT: (local.set $tmp |
| 1013 | + ;; CHECK-NEXT: (global.get $global$0) |
| 1014 | + ;; CHECK-NEXT: ) |
| 1015 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1016 | + ;; CHECK-NEXT: (i32.const 30) |
| 1017 | + ;; CHECK-NEXT: ) |
| 1018 | + ;; CHECK-NEXT: (local.get $tmp) |
| 1019 | + ;; CHECK-NEXT: ) |
| 1020 | + (func $global-with-get (result i32) |
| 1021 | + (local $tmp i32) |
| 1022 | + |
| 1023 | + (global.set $global$0 |
| 1024 | + (i32.const 10) |
| 1025 | + ) |
| 1026 | + |
| 1027 | + ;; We observed the otherwise dead store so we can't optimize it. |
| 1028 | + (local.set $tmp (global.get $global$0)) |
| 1029 | + |
| 1030 | + (global.set $global$0 |
| 1031 | + (i32.const 30) |
| 1032 | + ) |
| 1033 | + |
| 1034 | + (local.get $tmp) |
| 1035 | + ) |
| 1036 | + |
| 1037 | + ;; CHECK: (func $nothing (type $3) |
| 1038 | + ;; CHECK-NEXT: ) |
| 1039 | + (func $nothing |
| 1040 | + ) |
| 1041 | + |
| 1042 | + ;; CHECK: (func $global-with-call (type $3) |
| 1043 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1044 | + ;; CHECK-NEXT: (i32.const 10) |
| 1045 | + ;; CHECK-NEXT: ) |
| 1046 | + ;; CHECK-NEXT: (call $nothing) |
| 1047 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1048 | + ;; CHECK-NEXT: (i32.const 30) |
| 1049 | + ;; CHECK-NEXT: ) |
| 1050 | + ;; CHECK-NEXT: ) |
| 1051 | + (func $global-with-call |
| 1052 | + (global.set $global$0 |
| 1053 | + (i32.const 10) |
| 1054 | + ) |
| 1055 | + |
| 1056 | + ;; A function call might observe the otherwise dead store. |
| 1057 | + ;; We don't know unless we compute global effects first. |
| 1058 | + (call $nothing) |
| 1059 | + |
| 1060 | + (global.set $global$0 |
| 1061 | + (i32.const 30) |
| 1062 | + ) |
| 1063 | + ) |
| 1064 | + |
| 1065 | + ;; CHECK: (func $global-branch-always-dead (type $16) (param $bool i32) |
| 1066 | + ;; CHECK-NEXT: (drop |
| 1067 | + ;; CHECK-NEXT: (i32.const 10) |
| 1068 | + ;; CHECK-NEXT: ) |
| 1069 | + ;; CHECK-NEXT: (if |
| 1070 | + ;; CHECK-NEXT: (local.get $bool) |
| 1071 | + ;; CHECK-NEXT: (then |
| 1072 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1073 | + ;; CHECK-NEXT: (i32.const 20) |
| 1074 | + ;; CHECK-NEXT: ) |
| 1075 | + ;; CHECK-NEXT: ) |
| 1076 | + ;; CHECK-NEXT: (else |
| 1077 | + ;; CHECK-NEXT: (global.set $global$0 |
| 1078 | + ;; CHECK-NEXT: (i32.const 30) |
| 1079 | + ;; CHECK-NEXT: ) |
| 1080 | + ;; CHECK-NEXT: ) |
| 1081 | + ;; CHECK-NEXT: ) |
| 1082 | + ;; CHECK-NEXT: ) |
| 1083 | + (func $global-branch-always-dead (param $bool i32) |
| 1084 | + ;; This store is dead regardless of the branch. |
| 1085 | + (global.set $global$0 |
| 1086 | + (i32.const 10) |
| 1087 | + ) |
| 1088 | + |
| 1089 | + (if (local.get $bool) |
| 1090 | + (then |
| 1091 | + (global.set $global$0 (i32.const 20)) |
| 1092 | + ) |
| 1093 | + (else |
| 1094 | + (global.set $global$0 (i32.const 30)) |
| 1095 | + ) |
| 1096 | + ) |
| 1097 | + ) |
| 1098 | + |
1007 | 1099 | ;; CHECK: (func $global-trap (type $3) |
1008 | 1100 | ;; CHECK-NEXT: (global.set $global$0 |
1009 | 1101 | ;; CHECK-NEXT: (i32.const 10) |
|
0 commit comments