| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
|  | 2 | ; RUN: llc < %s -mtriple=powerpc64le-- -verify-machineinstrs | FileCheck %s | 
|  | 3 |  | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 4 | define i32 @sub_zext_cmp_mask_same_size_result(i32 %x) { | 
|  | 5 | ; CHECK-LABEL: sub_zext_cmp_mask_same_size_result: | 
|  | 6 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 7 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
|  | 8 | ; CHECK-NEXT:    ori 3, 3, 65508 | 
|  | 9 | ; CHECK-NEXT:    oris 3, 3, 65535 | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 10 | ; CHECK-NEXT:    blr | 
|  | 11 | %a = and i32 %x, 1 | 
|  | 12 | %c = icmp eq i32 %a, 0 | 
|  | 13 | %z = zext i1 %c to i32 | 
|  | 14 | %r = sub i32 -27, %z | 
|  | 15 | ret i32 %r | 
|  | 16 | } | 
|  | 17 |  | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 18 | define i32 @sub_zext_cmp_mask_wider_result(i8 %x) { | 
|  | 19 | ; CHECK-LABEL: sub_zext_cmp_mask_wider_result: | 
|  | 20 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 21 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
|  | 22 | ; CHECK-NEXT:    ori 3, 3, 26 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 23 | ; CHECK-NEXT:    blr | 
|  | 24 | %a = and i8 %x, 1 | 
|  | 25 | %c = icmp eq i8 %a, 0 | 
|  | 26 | %z = zext i1 %c to i32 | 
|  | 27 | %r = sub i32 27, %z | 
|  | 28 | ret i32 %r | 
|  | 29 | } | 
|  | 30 |  | 
|  | 31 | define i8 @sub_zext_cmp_mask_narrower_result(i32 %x) { | 
|  | 32 | ; CHECK-LABEL: sub_zext_cmp_mask_narrower_result: | 
|  | 33 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 34 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
|  | 35 | ; CHECK-NEXT:    ori 3, 3, 46 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 36 | ; CHECK-NEXT:    blr | 
|  | 37 | %a = and i32 %x, 1 | 
|  | 38 | %c = icmp eq i32 %a, 0 | 
|  | 39 | %z = zext i1 %c to i8 | 
|  | 40 | %r = sub i8 47, %z | 
|  | 41 | ret i8 %r | 
|  | 42 | } | 
|  | 43 |  | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 44 | define i8 @add_zext_cmp_mask_same_size_result(i8 %x) { | 
|  | 45 | ; CHECK-LABEL: add_zext_cmp_mask_same_size_result: | 
|  | 46 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 47 | ; CHECK-NEXT:    rlwinm 3, 3, 0, 31, 31 | 
|  | 48 | ; CHECK-NEXT:    subfic 3, 3, 27 | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 49 | ; CHECK-NEXT:    blr | 
|  | 50 | %a = and i8 %x, 1 | 
|  | 51 | %c = icmp eq i8 %a, 0 | 
|  | 52 | %z = zext i1 %c to i8 | 
|  | 53 | %r = add i8 %z, 26 | 
|  | 54 | ret i8 %r | 
|  | 55 | } | 
|  | 56 |  | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 57 | define i32 @add_zext_cmp_mask_wider_result(i8 %x) { | 
|  | 58 | ; CHECK-LABEL: add_zext_cmp_mask_wider_result: | 
|  | 59 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 60 | ; CHECK-NEXT:    rlwinm 3, 3, 0, 31, 31 | 
|  | 61 | ; CHECK-NEXT:    subfic 3, 3, 27 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 62 | ; CHECK-NEXT:    blr | 
|  | 63 | %a = and i8 %x, 1 | 
|  | 64 | %c = icmp eq i8 %a, 0 | 
|  | 65 | %z = zext i1 %c to i32 | 
|  | 66 | %r = add i32 %z, 26 | 
|  | 67 | ret i32 %r | 
|  | 68 | } | 
|  | 69 |  | 
|  | 70 | define i8 @add_zext_cmp_mask_narrower_result(i32 %x) { | 
|  | 71 | ; CHECK-LABEL: add_zext_cmp_mask_narrower_result: | 
|  | 72 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 73 | ; CHECK-NEXT:    rlwinm 3, 3, 0, 31, 31 | 
|  | 74 | ; CHECK-NEXT:    subfic 3, 3, 43 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 75 | ; CHECK-NEXT:    blr | 
|  | 76 | %a = and i32 %x, 1 | 
|  | 77 | %c = icmp eq i32 %a, 0 | 
|  | 78 | %z = zext i1 %c to i8 | 
|  | 79 | %r = add i8 %z, 42 | 
|  | 80 | ret i8 %r | 
|  | 81 | } | 
|  | 82 |  | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 83 | define i32 @low_bit_select_constants_bigger_false_same_size_result(i32 %x) { | 
|  | 84 | ; CHECK-LABEL: low_bit_select_constants_bigger_false_same_size_result: | 
|  | 85 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 86 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
| Sanjay Patel | 2d4b186 | 2019-02-07 17:43:34 +0000 | [diff] [blame] | 87 | ; CHECK-NEXT:    ori 3, 3, 42 | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 88 | ; CHECK-NEXT:    blr | 
|  | 89 | %a = and i32 %x, 1 | 
|  | 90 | %c = icmp eq i32 %a, 0 | 
|  | 91 | %r = select i1 %c, i32 42, i32 43 | 
|  | 92 | ret i32 %r | 
|  | 93 | } | 
|  | 94 |  | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 95 | define i64 @low_bit_select_constants_bigger_false_wider_result(i32 %x) { | 
|  | 96 | ; CHECK-LABEL: low_bit_select_constants_bigger_false_wider_result: | 
|  | 97 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 98 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
| Sanjay Patel | 2d4b186 | 2019-02-07 17:43:34 +0000 | [diff] [blame] | 99 | ; CHECK-NEXT:    ori 3, 3, 26 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 100 | ; CHECK-NEXT:    blr | 
|  | 101 | %a = and i32 %x, 1 | 
|  | 102 | %c = icmp eq i32 %a, 0 | 
|  | 103 | %r = select i1 %c, i64 26, i64 27 | 
|  | 104 | ret i64 %r | 
|  | 105 | } | 
|  | 106 |  | 
|  | 107 | define i16 @low_bit_select_constants_bigger_false_narrower_result(i32 %x) { | 
|  | 108 | ; CHECK-LABEL: low_bit_select_constants_bigger_false_narrower_result: | 
|  | 109 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 2d4b186 | 2019-02-07 17:43:34 +0000 | [diff] [blame] | 110 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
|  | 111 | ; CHECK-NEXT:    ori 3, 3, 36 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 112 | ; CHECK-NEXT:    blr | 
|  | 113 | %a = and i32 %x, 1 | 
|  | 114 | %c = icmp eq i32 %a, 0 | 
|  | 115 | %r = select i1 %c, i16 36, i16 37 | 
|  | 116 | ret i16 %r | 
|  | 117 | } | 
|  | 118 |  | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 119 | define i8 @low_bit_select_constants_bigger_true_same_size_result(i8 %x) { | 
|  | 120 | ; CHECK-LABEL: low_bit_select_constants_bigger_true_same_size_result: | 
|  | 121 | ; CHECK:       # %bb.0: | 
| QingShan Zhang | e0e7d4c | 2019-06-26 05:12:53 +0000 | [diff] [blame] | 122 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 123 | ; CHECK-NEXT:    subfic 3, 3, -29 | 
| Sanjay Patel | 0fe8ea5 | 2018-06-22 22:06:33 +0000 | [diff] [blame] | 124 | ; CHECK-NEXT:    blr | 
|  | 125 | %a = and i8 %x, 1 | 
|  | 126 | %c = icmp eq i8 %a, 0 | 
|  | 127 | %r = select i1 %c, i8 227, i8 226 | 
|  | 128 | ret i8 %r | 
|  | 129 | } | 
|  | 130 |  | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 131 | define i32 @low_bit_select_constants_bigger_true_wider_result(i8 %x) { | 
|  | 132 | ; CHECK-LABEL: low_bit_select_constants_bigger_true_wider_result: | 
|  | 133 | ; CHECK:       # %bb.0: | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 134 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 135 | ; CHECK-NEXT:    subfic 3, 3, 227 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 136 | ; CHECK-NEXT:    blr | 
|  | 137 | %a = and i8 %x, 1 | 
|  | 138 | %c = icmp eq i8 %a, 0 | 
|  | 139 | %r = select i1 %c, i32 227, i32 226 | 
|  | 140 | ret i32 %r | 
|  | 141 | } | 
|  | 142 |  | 
|  | 143 | define i8 @low_bit_select_constants_bigger_true_narrower_result(i16 %x) { | 
|  | 144 | ; CHECK-LABEL: low_bit_select_constants_bigger_true_narrower_result: | 
|  | 145 | ; CHECK:       # %bb.0: | 
| QingShan Zhang | e0e7d4c | 2019-06-26 05:12:53 +0000 | [diff] [blame] | 146 | ; CHECK-NEXT:    clrldi 3, 3, 63 | 
| Sanjay Patel | 962ee17 | 2018-06-24 14:37:30 +0000 | [diff] [blame] | 147 | ; CHECK-NEXT:    subfic 3, 3, 41 | 
| Sanjay Patel | 6e505e4 | 2018-06-22 21:16:29 +0000 | [diff] [blame] | 148 | ; CHECK-NEXT:    blr | 
|  | 149 | %a = and i16 %x, 1 | 
|  | 150 | %c = icmp eq i16 %a, 0 | 
|  | 151 | %r = select i1 %c, i8 41, i8 40 | 
|  | 152 | ret i8 %r | 
|  | 153 | } | 
|  | 154 |  |