brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · e08bbbd Raw
233 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare void @use(i8)5 6define i1 @fold_sext_to_and(i8 %x) {7; CHECK-LABEL: define i1 @fold_sext_to_and(8; CHECK-SAME: i8 [[X:%.*]]) {9; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], -12710; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i8 [[TMP1]], 111; CHECK-NEXT:    ret i1 [[TMP3]]12;13  %1 = sext i8 %x to i3214  %2 = and i32 %1, -214748364715  %3 = icmp eq i32 %2, 116  ret i1 %317}18 19define i1 @fold_sext_to_and1(i8 %x) {20; CHECK-LABEL: define i1 @fold_sext_to_and1(21; CHECK-SAME: i8 [[X:%.*]]) {22; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], -12723; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[TMP1]], 124; CHECK-NEXT:    ret i1 [[TMP3]]25;26  %1 = sext i8 %x to i3227  %2 = and i32 %1, -214748364728  %3 = icmp ne i32 %2, 129  ret i1 %330}31 32define i1 @fold_sext_to_and2(i8 %x) {33; CHECK-LABEL: define i1 @fold_sext_to_and2(34; CHECK-SAME: i8 [[X:%.*]]) {35; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], -12636; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i8 [[TMP1]], 237; CHECK-NEXT:    ret i1 [[TMP3]]38;39  %1 = sext i8 %x to i3240  %2 = and i32 %1, 107374182641  %3 = icmp eq i32 %2, 242  ret i1 %343}44 45define i1 @fold_sext_to_and3(i8 %x) {46; CHECK-LABEL: define i1 @fold_sext_to_and3(47; CHECK-SAME: i8 [[X:%.*]]) {48; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], -12649; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[TMP1]], 250; CHECK-NEXT:    ret i1 [[TMP3]]51;52  %1 = sext i8 %x to i3253  %2 = and i32 %1, 107374182654  %3 = icmp ne i32 %2, 255  ret i1 %356}57 58define i1 @fold_sext_to_and_multi_use(i8 %x) {59; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use(60; CHECK-SAME: i8 [[X:%.*]]) {61; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[X]] to i3262; CHECK-NEXT:    call void @use(i32 [[TMP1]])63; CHECK-NEXT:    [[TMP2:%.*]] = and i8 [[X]], -12764; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i8 [[TMP2]], 165; CHECK-NEXT:    ret i1 [[TMP3]]66;67  %1 = sext i8 %x to i3268  call void @use(i32 %1)69  %2 = and i32 %1, -214748364770  %3 = icmp eq i32 %2, 171  ret i1 %372}73 74define i1 @fold_sext_to_and_multi_use1(i8 %x) {75; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use1(76; CHECK-SAME: i8 [[X:%.*]]) {77; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[X]] to i3278; CHECK-NEXT:    call void @use(i32 [[TMP1]])79; CHECK-NEXT:    [[TMP2:%.*]] = and i8 [[X]], -12780; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[TMP2]], 181; CHECK-NEXT:    ret i1 [[TMP3]]82;83  %1 = sext i8 %x to i3284  call void @use(i32 %1)85  %2 = and i32 %1, -214748364786  %3 = icmp ne i32 %2, 187  ret i1 %388}89 90define i1 @fold_sext_to_and_multi_use2(i8 %x) {91; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use2(92; CHECK-SAME: i8 [[X:%.*]]) {93; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[X]] to i3294; CHECK-NEXT:    call void @use(i32 [[TMP1]])95; CHECK-NEXT:    [[TMP2:%.*]] = and i8 [[X]], -12696; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i8 [[TMP2]], 297; CHECK-NEXT:    ret i1 [[TMP3]]98;99  %1 = sext i8 %x to i32100  call void @use(i32 %1)101  %2 = and i32 %1, 1073741826102  %3 = icmp eq i32 %2, 2103  ret i1 %3104}105 106define i1 @fold_sext_to_and_multi_use3(i8 %x) {107; CHECK-LABEL: define i1 @fold_sext_to_and_multi_use3(108; CHECK-SAME: i8 [[X:%.*]]) {109; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[X]] to i32110; CHECK-NEXT:    call void @use(i32 [[TMP1]])111; CHECK-NEXT:    [[TMP2:%.*]] = and i8 [[X]], -126112; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[TMP2]], 2113; CHECK-NEXT:    ret i1 [[TMP3]]114;115  %1 = sext i8 %x to i32116  call void @use(i32 %1)117  %2 = and i32 %1, 1073741826118  %3 = icmp ne i32 %2, 2119  ret i1 %3120}121 122; Negative tests123 124define i1 @fold_sext_to_and_wrong(i8 %x) {125; CHECK-LABEL: define i1 @fold_sext_to_and_wrong(126; CHECK-SAME: i8 [[X:%.*]]) {127; CHECK-NEXT:    ret i1 false128;129  %1 = sext i8 %x to i32130  %2 = and i32 %1, -2147483647131  %3 = icmp eq i32 %2, -1132  ret i1 %3133}134 135define i1 @fold_sext_to_and_wrong2(i8 %x) {136; CHECK-LABEL: define i1 @fold_sext_to_and_wrong2(137; CHECK-SAME: i8 [[X:%.*]]) {138; CHECK-NEXT:    ret i1 false139;140  %1 = sext i8 %x to i32141  %2 = and i32 %1, -2147483647142  %3 = icmp eq i32 %2, 128143  ret i1 %3144}145 146define i1 @fold_sext_to_and_wrong3(i8 %x) {147; CHECK-LABEL: define i1 @fold_sext_to_and_wrong3(148; CHECK-SAME: i8 [[X:%.*]]) {149; CHECK-NEXT:    ret i1 false150;151  %1 = sext i8 %x to i32152  %2 = and i32 %1, 128153  %3 = icmp eq i32 %2, -2147483648154  ret i1 %3155}156 157define i1 @fold_sext_to_and_wrong4(i8 %x) {158; CHECK-LABEL: define i1 @fold_sext_to_and_wrong4(159; CHECK-SAME: i8 [[X:%.*]]) {160; CHECK-NEXT:    ret i1 false161;162  %1 = sext i8 %x to i32163  %2 = and i32 %1, 128164  %3 = icmp eq i32 %2, 1165  ret i1 %3166}167 168define i1 @fold_sext_to_and_wrong5(i8 %x) {169; CHECK-LABEL: define i1 @fold_sext_to_and_wrong5(170; CHECK-SAME: i8 [[X:%.*]]) {171; CHECK-NEXT:    ret i1 false172;173  %1 = sext i8 %x to i32174  %2 = and i32 %1, -256175  %3 = icmp eq i32 %2, 1176  ret i1 %3177}178 179define i1 @fold_sext_to_and_wrong6(i8 %x) {180; CHECK-LABEL: define i1 @fold_sext_to_and_wrong6(181; CHECK-SAME: i8 [[X:%.*]]) {182; CHECK-NEXT:    ret i1 true183;184  %1 = sext i8 %x to i32185  %2 = and i32 %1, -2147483647186  %3 = icmp ne i32 %2, -1187  ret i1 %3188}189 190define i1 @fold_sext_to_and_wrong7(i8 %x) {191; CHECK-LABEL: define i1 @fold_sext_to_and_wrong7(192; CHECK-SAME: i8 [[X:%.*]]) {193; CHECK-NEXT:    ret i1 true194;195  %1 = sext i8 %x to i32196  %2 = and i32 %1, -2147483647197  %3 = icmp ne i32 %2, 128198  ret i1 %3199}200 201define i1 @fold_sext_to_and_wrong8(i8 %x) {202; CHECK-LABEL: define i1 @fold_sext_to_and_wrong8(203; CHECK-SAME: i8 [[X:%.*]]) {204; CHECK-NEXT:    ret i1 true205;206  %1 = sext i8 %x to i32207  %2 = and i32 %1, 128208  %3 = icmp ne i32 %2, -2147483648209  ret i1 %3210}211 212define i1 @fold_sext_to_and_wrong9(i8 %x) {213; CHECK-LABEL: define i1 @fold_sext_to_and_wrong9(214; CHECK-SAME: i8 [[X:%.*]]) {215; CHECK-NEXT:    ret i1 true216;217  %1 = sext i8 %x to i32218  %2 = and i32 %1, 128219  %3 = icmp ne i32 %2, 1220  ret i1 %3221}222 223define i1 @fold_sext_to_and_wrong10(i8 %x) {224; CHECK-LABEL: define i1 @fold_sext_to_and_wrong10(225; CHECK-SAME: i8 [[X:%.*]]) {226; CHECK-NEXT:    ret i1 true227;228  %1 = sext i8 %x to i32229  %2 = and i32 %1, -256230  %3 = icmp ne i32 %2, 1231  ret i1 %3232}233