@@ -2068,3 +2068,90 @@ cond.end: ; preds = %entry, %cond.false
2068
2068
%conv = sext i3 %cond to i8
2069
2069
ret i8 %conv
2070
2070
}
2071
+
2072
+ define i32 @pr67843 (i8 %0 ) {
2073
+ ; CHECK-LABEL: @pr67843(
2074
+ ; CHECK-NEXT: start:
2075
+ ; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub nsw i8 [[TMP0:%.*]], -1
2076
+ ; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [3 x i32], ptr @switch.table.pr67843, i32 0, i8 [[SWITCH_TABLEIDX]]
2077
+ ; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2078
+ ; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
2079
+ ;
2080
+ start:
2081
+ switch i8 %0 , label %bb2 [
2082
+ i8 0 , label %bb5
2083
+ i8 1 , label %bb4
2084
+ i8 -1 , label %bb1
2085
+ ]
2086
+
2087
+ bb2: ; preds = %start
2088
+ unreachable
2089
+
2090
+ bb4: ; preds = %start
2091
+ br label %bb5
2092
+
2093
+ bb1: ; preds = %start
2094
+ br label %bb5
2095
+
2096
+ bb5: ; preds = %start, %bb1, %bb4
2097
+ %.0 = phi i32 [ 255 , %bb1 ], [ 1 , %bb4 ], [ 0 , %start ]
2098
+ ret i32 %.0
2099
+ }
2100
+
2101
+ define i32 @linearmap_masked_with_common_highbits (i8 %0 ) {
2102
+ ; CHECK-LABEL: @linearmap_masked_with_common_highbits(
2103
+ ; CHECK-NEXT: start:
2104
+ ; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub nsw i8 [[TMP0:%.*]], -1
2105
+ ; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [3 x i32], ptr @switch.table.linearmap_masked_with_common_highbits, i32 0, i8 [[SWITCH_TABLEIDX]]
2106
+ ; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2107
+ ; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
2108
+ ;
2109
+ start:
2110
+ switch i8 %0 , label %bb2 [
2111
+ i8 0 , label %bb5
2112
+ i8 1 , label %bb4
2113
+ i8 -1 , label %bb1
2114
+ ]
2115
+
2116
+ bb2: ; preds = %start
2117
+ unreachable
2118
+
2119
+ bb4: ; preds = %start
2120
+ br label %bb5
2121
+
2122
+ bb1: ; preds = %start
2123
+ br label %bb5
2124
+
2125
+ bb5: ; preds = %start, %bb1, %bb4
2126
+ %.0 = phi i32 [ 511 , %bb1 ], [ 257 , %bb4 ], [ 256 , %start ]
2127
+ ret i32 %.0
2128
+ }
2129
+
2130
+ define i32 @linearmap_masked_with_common_highbits_fail (i8 %0 ) {
2131
+ ; CHECK-LABEL: @linearmap_masked_with_common_highbits_fail(
2132
+ ; CHECK-NEXT: start:
2133
+ ; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub nsw i8 [[TMP0:%.*]], -1
2134
+ ; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [3 x i32], ptr @switch.table.linearmap_masked_with_common_highbits_fail, i32 0, i8 [[SWITCH_TABLEIDX]]
2135
+ ; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2136
+ ; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
2137
+ ;
2138
+ start:
2139
+ switch i8 %0 , label %bb2 [
2140
+ i8 0 , label %bb5
2141
+ i8 1 , label %bb4
2142
+ i8 -1 , label %bb1
2143
+ ]
2144
+
2145
+ bb2: ; preds = %start
2146
+ unreachable
2147
+
2148
+ bb4: ; preds = %start
2149
+ br label %bb5
2150
+
2151
+ bb1: ; preds = %start
2152
+ br label %bb5
2153
+
2154
+ bb5: ; preds = %start, %bb1, %bb4
2155
+ %.0 = phi i32 [ 1023 , %bb1 ], [ 257 , %bb4 ], [ 256 , %start ]
2156
+ ret i32 %.0
2157
+ }
0 commit comments