1f6262201SManolis Tsamis; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2f6262201SManolis Tsamis; RUN: llc -mtriple=riscv32 -mattr=+d -mattr=+xtheadmemidx -mattr=+m -verify-machineinstrs < %s \ 3f6262201SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV32XTHEADMEMIDX 4f6262201SManolis Tsamis; RUN: llc -mtriple=riscv64 -mattr=+d -mattr=+xtheadmemidx -mattr=+m -verify-machineinstrs < %s \ 5f6262201SManolis Tsamis; RUN: | FileCheck %s -check-prefix=RV64XTHEADMEMIDX 6f6262201SManolis Tsamis 7ff9af4c4SNikita Popovdefine ptr @lbia(ptr %base, ptr %addr.2, i8 %a) { 8f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lbia: 9f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 10f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lbia a3, (a0), -1, 0 11f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a3, a2 12f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sb a2, 0(a1) 13f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 14f6262201SManolis Tsamis; 15f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lbia: 16f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 17f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lbia a3, (a0), -1, 0 18f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 19f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sb a2, 0(a1) 20f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 21ff9af4c4SNikita Popov %addr = getelementptr i8, ptr %base, i8 0 22ff9af4c4SNikita Popov %ld = load i8, ptr %addr 23ff9af4c4SNikita Popov %addr.1 = getelementptr i8, ptr %base, i8 -1 24f6262201SManolis Tsamis %res = add i8 %ld, %a 25ff9af4c4SNikita Popov store i8 %res, ptr %addr.2 26ff9af4c4SNikita Popov ret ptr %addr.1 27f6262201SManolis Tsamis} 28f6262201SManolis Tsamis 29ff9af4c4SNikita Popovdefine ptr @lbib(ptr %base, i8 %a) { 30f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lbib: 31f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 32f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lbib a2, (a0), 1, 0 33f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 34f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sb a1, 1(a0) 35f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 36f6262201SManolis Tsamis; 37f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lbib: 38f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 39f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lbib a2, (a0), 1, 0 40f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a2, a1 41f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sb a1, 1(a0) 42f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 43ff9af4c4SNikita Popov %addr = getelementptr i8, ptr %base, i8 1 44ff9af4c4SNikita Popov %ld = load i8, ptr %addr 45ff9af4c4SNikita Popov %addr.1 = getelementptr i8, ptr %base, i8 2 46f6262201SManolis Tsamis %res = add i8 %ld, %a 47ff9af4c4SNikita Popov store i8 %res, ptr %addr.1 48ff9af4c4SNikita Popov ret ptr %addr 49f6262201SManolis Tsamis} 50f6262201SManolis Tsamis 51ff9af4c4SNikita Popovdefine ptr @lbuia(ptr %base, ptr %addr.2, i64 %a) { 52f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lbuia: 53f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 54f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lbuia a4, (a0), -1, 0 55f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a4, a2 56f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a2, a4 57f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a4 58f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 0(a1) 59f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 4(a1) 60f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 61f6262201SManolis Tsamis; 62f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lbuia: 63f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 64f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lbuia a3, (a0), -1, 0 65f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 66f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a2, 0(a1) 67f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 68ff9af4c4SNikita Popov %addr = getelementptr i8, ptr %base, i8 0 69ff9af4c4SNikita Popov %ld = load i8, ptr %addr 70f6262201SManolis Tsamis %zext = zext i8 %ld to i64 71ff9af4c4SNikita Popov %addr.1 = getelementptr i8, ptr %base, i8 -1 72f6262201SManolis Tsamis %res = add i64 %zext, %a 73ff9af4c4SNikita Popov store i64 %res, ptr %addr.2 74ff9af4c4SNikita Popov ret ptr %addr.1 75f6262201SManolis Tsamis} 76f6262201SManolis Tsamis 77ff9af4c4SNikita Popovdefine ptr @lbuib(ptr %base, i64 %a, ptr %addr.1) { 78f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lbuib: 79f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 80f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lbuib a4, (a0), 1, 0 81f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a4, a1 82f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a1, a4 83f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a4 84f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 0(a3) 85f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 4(a3) 86f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 87f6262201SManolis Tsamis; 88f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lbuib: 89f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 90f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lbuib a3, (a0), 1, 0 91f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a3, a1 92f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a1, 0(a2) 93f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 94ff9af4c4SNikita Popov %addr = getelementptr i8, ptr %base, i8 1 95ff9af4c4SNikita Popov %ld = load i8, ptr %addr 96f6262201SManolis Tsamis %zext = zext i8 %ld to i64 97f6262201SManolis Tsamis %res = add i64 %zext, %a 98ff9af4c4SNikita Popov store i64 %res, ptr %addr.1 99ff9af4c4SNikita Popov ret ptr %addr 100f6262201SManolis Tsamis} 101f6262201SManolis Tsamis 102ff9af4c4SNikita Popovdefine ptr @lhia(ptr %base, ptr %addr.2, i16 %a) { 103f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lhia: 104f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 105f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lhia a3, (a0), -16, 1 106f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a3, a2 107f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sh a2, 0(a1) 108f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 109f6262201SManolis Tsamis; 110f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lhia: 111f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 112f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lhia a3, (a0), -16, 1 113f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 114f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sh a2, 0(a1) 115f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 116ff9af4c4SNikita Popov %addr = getelementptr i16, ptr %base, i16 0 117ff9af4c4SNikita Popov %ld = load i16, ptr %addr 118ff9af4c4SNikita Popov %addr.1 = getelementptr i16, ptr %base, i16 -16 119f6262201SManolis Tsamis %res = add i16 %ld, %a 120ff9af4c4SNikita Popov store i16 %res, ptr %addr.2 121ff9af4c4SNikita Popov ret ptr %addr.1 122f6262201SManolis Tsamis} 123f6262201SManolis Tsamis 124ff9af4c4SNikita Popovdefine ptr @lhib(ptr %base, i16 %a) { 125f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lhib: 126f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 127f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lhib a2, (a0), 2, 0 128f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 129f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sh a1, 2(a0) 130f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 131f6262201SManolis Tsamis; 132f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lhib: 133f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 134f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lhib a2, (a0), 2, 0 135f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a2, a1 136f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sh a1, 2(a0) 137f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 138ff9af4c4SNikita Popov %addr = getelementptr i16, ptr %base, i16 1 139ff9af4c4SNikita Popov %ld = load i16, ptr %addr 140ff9af4c4SNikita Popov %addr.1 = getelementptr i16, ptr %base, i16 2 141f6262201SManolis Tsamis %res = add i16 %ld, %a 142ff9af4c4SNikita Popov store i16 %res, ptr %addr.1 143ff9af4c4SNikita Popov ret ptr %addr 144f6262201SManolis Tsamis} 145f6262201SManolis Tsamis 146ff9af4c4SNikita Popovdefine ptr @lhuia(ptr %base, ptr %addr.2, i64 %a) { 147f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lhuia: 148f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 149f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lhuia a4, (a0), -16, 1 150f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a4, a2 151f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a2, a4 152f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a4 153f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 0(a1) 154f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 4(a1) 155f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 156f6262201SManolis Tsamis; 157f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lhuia: 158f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 159f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lhuia a3, (a0), -16, 1 160f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 161f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a2, 0(a1) 162f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 163ff9af4c4SNikita Popov %addr = getelementptr i16, ptr %base, i16 0 164ff9af4c4SNikita Popov %ld = load i16, ptr %addr 165f6262201SManolis Tsamis %zext = zext i16 %ld to i64 166ff9af4c4SNikita Popov %addr.1 = getelementptr i16, ptr %base, i16 -16 167f6262201SManolis Tsamis %res = add i64 %zext, %a 168ff9af4c4SNikita Popov store i64 %res, ptr %addr.2 169ff9af4c4SNikita Popov ret ptr %addr.1 170f6262201SManolis Tsamis} 171f6262201SManolis Tsamis 172ff9af4c4SNikita Popovdefine ptr @lhuib(ptr %base, i64 %a, ptr %addr.1) { 173f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lhuib: 174f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 175f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lhuib a4, (a0), 2, 0 176f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a4, a1 177f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a1, a4 178f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a4 179f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 0(a3) 180f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 4(a3) 181f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 182f6262201SManolis Tsamis; 183f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lhuib: 184f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 185f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lhuib a3, (a0), 2, 0 186f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a3, a1 187f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a1, 0(a2) 188f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 189ff9af4c4SNikita Popov %addr = getelementptr i16, ptr %base, i16 1 190ff9af4c4SNikita Popov %ld = load i16, ptr %addr 191f6262201SManolis Tsamis %zext = zext i16 %ld to i64 192f6262201SManolis Tsamis %res = add i64 %zext, %a 193ff9af4c4SNikita Popov store i64 %res, ptr %addr.1 194ff9af4c4SNikita Popov ret ptr %addr 195f6262201SManolis Tsamis} 196f6262201SManolis Tsamis 197ff9af4c4SNikita Popovdefine ptr @lwia(ptr %base, ptr %addr.2, i32 %a) { 198f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lwia: 199f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 200f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lwia a3, (a0), -16, 2 201f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a3, a2 202f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 0(a1) 203f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 204f6262201SManolis Tsamis; 205f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lwia: 206f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 207f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lwia a3, (a0), -16, 2 208f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 209f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sw a2, 0(a1) 210f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 211ff9af4c4SNikita Popov %addr = getelementptr i32, ptr %base, i32 0 212ff9af4c4SNikita Popov %ld = load i32, ptr %addr 213ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 -16 214f6262201SManolis Tsamis %res = add i32 %ld, %a 215ff9af4c4SNikita Popov store i32 %res, ptr %addr.2 216ff9af4c4SNikita Popov ret ptr %addr.1 217f6262201SManolis Tsamis} 218f6262201SManolis Tsamis 219ff9af4c4SNikita Popovdefine ptr @lwib(ptr %base, i32 %a) { 220f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lwib: 221f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 222f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lwib a2, (a0), 4, 0 223f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 224f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 4(a0) 225f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 226f6262201SManolis Tsamis; 227f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lwib: 228f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 229f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lwib a2, (a0), 4, 0 230f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a2, a1 231f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sw a1, 4(a0) 232f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 233ff9af4c4SNikita Popov %addr = getelementptr i32, ptr %base, i32 1 234ff9af4c4SNikita Popov %ld = load i32, ptr %addr 235ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 2 236f6262201SManolis Tsamis %res = add i32 %ld, %a 237ff9af4c4SNikita Popov store i32 %res, ptr %addr.1 238ff9af4c4SNikita Popov ret ptr %addr 239f6262201SManolis Tsamis} 240f6262201SManolis Tsamis 241ff9af4c4SNikita Popovdefine ptr @lwuia(ptr %base, ptr %addr.2, i64 %a) { 242f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lwuia: 243f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 244f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lwia a4, (a0), -16, 2 245f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a4, a2 246f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a2, a4 247f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a4 248f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 0(a1) 249f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 4(a1) 250f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 251f6262201SManolis Tsamis; 252f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lwuia: 253f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 254f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lwuia a3, (a0), -16, 2 255f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 256f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a2, 0(a1) 257f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 258ff9af4c4SNikita Popov %addr = getelementptr i32, ptr %base, i32 0 259ff9af4c4SNikita Popov %ld = load i32, ptr %addr 260f6262201SManolis Tsamis %zext = zext i32 %ld to i64 261ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 -16 262f6262201SManolis Tsamis %res = add i64 %zext, %a 263ff9af4c4SNikita Popov store i64 %res, ptr %addr.2 264ff9af4c4SNikita Popov ret ptr %addr.1 265f6262201SManolis Tsamis} 266f6262201SManolis Tsamis 267ff9af4c4SNikita Popovdefine ptr @lwuib(ptr %base, i64 %a, ptr %addr.1) { 268f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lwuib: 269f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 270f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lwib a4, (a0), 4, 0 271f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a4, a1 272f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a1, a4 273f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a4 274f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 0(a3) 275f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 4(a3) 276f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 277f6262201SManolis Tsamis; 278f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lwuib: 279f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 280f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lwuib a3, (a0), 4, 0 281f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a3, a1 282f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a1, 0(a2) 283f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 284ff9af4c4SNikita Popov %addr = getelementptr i32, ptr %base, i32 1 285ff9af4c4SNikita Popov %ld = load i32, ptr %addr 286f6262201SManolis Tsamis %zext = zext i32 %ld to i64 287f6262201SManolis Tsamis %res = add i64 %zext, %a 288ff9af4c4SNikita Popov store i64 %res, ptr %addr.1 289ff9af4c4SNikita Popov ret ptr %addr 290f6262201SManolis Tsamis} 291f6262201SManolis Tsamis 292ff9af4c4SNikita Popovdefine ptr @ldia(ptr %base, ptr %addr.2, i64 %a) { 293f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: ldia: 294f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 295f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a4, 4(a0) 296f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a5, 0(a0) 297f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: addi a0, a0, -128 298f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a4, a3 299f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a5, a2 300f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a4, a2, a5 301f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a4 302f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 0(a1) 303f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 4(a1) 304f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 305f6262201SManolis Tsamis; 306f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: ldia: 307f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 308f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.ldia a3, (a0), -16, 3 309f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a3, a2 310f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a2, 0(a1) 311f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 312ff9af4c4SNikita Popov %addr = getelementptr i64, ptr %base, i64 0 313ff9af4c4SNikita Popov %ld = load i64, ptr %addr 314ff9af4c4SNikita Popov %addr.1 = getelementptr i64, ptr %base, i64 -16 315f6262201SManolis Tsamis %res = add i64 %ld, %a 316ff9af4c4SNikita Popov store i64 %res, ptr %addr.2 317ff9af4c4SNikita Popov ret ptr %addr.1 318f6262201SManolis Tsamis} 319f6262201SManolis Tsamis 320ff9af4c4SNikita Popovdefine ptr @ldib(ptr %base, i64 %a) { 321f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: ldib: 322f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 323f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lwib a3, (a0), 8, 0 324f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a4, 4(a0) 325f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a3, a1 326f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a3, a1, a3 327f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a3 328f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a4, a2 329f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 8(a0) 330f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 12(a0) 331f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 332f6262201SManolis Tsamis; 333f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: ldib: 334f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 335f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.ldib a2, (a0), 8, 0 336f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a2, a1 337f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: sd a1, 8(a0) 338f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 339ff9af4c4SNikita Popov %addr = getelementptr i64, ptr %base, i64 1 340ff9af4c4SNikita Popov %ld = load i64, ptr %addr 341ff9af4c4SNikita Popov %addr.1 = getelementptr i64, ptr %base, i64 2 342f6262201SManolis Tsamis %res = add i64 %ld, %a 343ff9af4c4SNikita Popov store i64 %res, ptr %addr.1 344ff9af4c4SNikita Popov ret ptr %addr 345f6262201SManolis Tsamis} 346f6262201SManolis Tsamis 347ff9af4c4SNikita Popovdefine ptr @sbia(ptr %base, i8 %a, i8 %b) { 348f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: sbia: 349f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 350f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 351f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.sbia a1, (a0), 1, 0 352f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 353f6262201SManolis Tsamis; 354f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: sbia: 355f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 356f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 357f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.sbia a1, (a0), 1, 0 358f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 359ff9af4c4SNikita Popov %addr.1 = getelementptr i8, ptr %base, i8 1 360f6262201SManolis Tsamis %res = add i8 %a, %b 361ff9af4c4SNikita Popov store i8 %res, ptr %base 362ff9af4c4SNikita Popov ret ptr %addr.1 363f6262201SManolis Tsamis} 364f6262201SManolis Tsamis 365ff9af4c4SNikita Popovdefine ptr @sbib(ptr %base, i8 %a, i8 %b) { 366f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: sbib: 367f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 368f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 369f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.sbib a1, (a0), 1, 0 370f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 371f6262201SManolis Tsamis; 372f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: sbib: 373f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 374f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 375f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.sbib a1, (a0), 1, 0 376f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 377ff9af4c4SNikita Popov %addr.1 = getelementptr i8, ptr %base, i8 1 378f6262201SManolis Tsamis %res = add i8 %a, %b 379ff9af4c4SNikita Popov store i8 %res, ptr %addr.1 380ff9af4c4SNikita Popov ret ptr %addr.1 381f6262201SManolis Tsamis} 382f6262201SManolis Tsamis 383ff9af4c4SNikita Popovdefine ptr @shia(ptr %base, i16 %a, i16 %b) { 384f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: shia: 385f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 386f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 387f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.shia a1, (a0), -9, 1 388f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 389f6262201SManolis Tsamis; 390f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: shia: 391f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 392f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 393f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.shia a1, (a0), -9, 1 394f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 395ff9af4c4SNikita Popov %addr.1 = getelementptr i16, ptr %base, i16 -9 396f6262201SManolis Tsamis %res = add i16 %a, %b 397ff9af4c4SNikita Popov store i16 %res, ptr %base 398ff9af4c4SNikita Popov ret ptr %addr.1 399f6262201SManolis Tsamis} 400f6262201SManolis Tsamis 401ff9af4c4SNikita Popovdefine ptr @shib(ptr %base, i16 %a, i16 %b) { 402f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: shib: 403f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 404f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 405f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.shib a1, (a0), 2, 0 406f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 407f6262201SManolis Tsamis; 408f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: shib: 409f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 410f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 411f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.shib a1, (a0), 2, 0 412f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 413ff9af4c4SNikita Popov %addr.1 = getelementptr i16, ptr %base, i16 1 414f6262201SManolis Tsamis %res = add i16 %a, %b 415ff9af4c4SNikita Popov store i16 %res, ptr %addr.1 416ff9af4c4SNikita Popov ret ptr %addr.1 417f6262201SManolis Tsamis} 418f6262201SManolis Tsamis 419ff9af4c4SNikita Popovdefine ptr @swia(ptr %base, i32 %a, i32 %b) { 420f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: swia: 421f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 422f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 423f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.swia a1, (a0), 8, 2 424f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 425f6262201SManolis Tsamis; 426f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: swia: 427f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 428f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 429f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.swia a1, (a0), 8, 2 430f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 431ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 8 432f6262201SManolis Tsamis %res = add i32 %a, %b 433ff9af4c4SNikita Popov store i32 %res, ptr %base 434ff9af4c4SNikita Popov ret ptr %addr.1 435f6262201SManolis Tsamis} 436f6262201SManolis Tsamis 437ff9af4c4SNikita Popovdefine ptr @swib(ptr %base, i32 %a, i32 %b) { 438f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: swib: 439f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 440f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 441f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.swib a1, (a0), -13, 3 442f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 443f6262201SManolis Tsamis; 444f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: swib: 445f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 446f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 447f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.swib a1, (a0), -13, 3 448f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 449ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 -26 450f6262201SManolis Tsamis %res = add i32 %a, %b 451ff9af4c4SNikita Popov store i32 %res, ptr %addr.1 452ff9af4c4SNikita Popov ret ptr %addr.1 453f6262201SManolis Tsamis} 454f6262201SManolis Tsamis 455ff9af4c4SNikita Popovdefine ptr @sdia(ptr %base, i64 %a, i64 %b) { 456f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: sdia: 457f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 458f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: addi a5, a0, 64 459f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a4 460f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a1, a3 461f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a3, a1 462f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 463f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 0(a0) 464f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 4(a0) 465f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: mv a0, a5 466f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 467f6262201SManolis Tsamis; 468f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: sdia: 469f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 470f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 471f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.sdia a1, (a0), 8, 3 472f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 473ff9af4c4SNikita Popov %addr.1 = getelementptr i64, ptr %base, i64 8 474f6262201SManolis Tsamis %res = add i64 %a, %b 475ff9af4c4SNikita Popov store i64 %res, ptr %base 476ff9af4c4SNikita Popov ret ptr %addr.1 477f6262201SManolis Tsamis} 478f6262201SManolis Tsamis 479ff9af4c4SNikita Popovdefine ptr @sdib(ptr %base, i64 %a, i64 %b) { 480f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: sdib: 481f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 482f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a4 483f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a1, a3 484f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a3, a1 485f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 486f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.swib a3, (a0), 8, 0 487f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a1, 4(a0) 488f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 489f6262201SManolis Tsamis; 490f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: sdib: 491f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 492f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 493f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.sdib a1, (a0), 8, 0 494f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 495ff9af4c4SNikita Popov %addr.1 = getelementptr i64, ptr %base, i64 1 496f6262201SManolis Tsamis %res = add i64 %a, %b 497ff9af4c4SNikita Popov store i64 %res, ptr %addr.1 498ff9af4c4SNikita Popov ret ptr %addr.1 499f6262201SManolis Tsamis} 500f6262201SManolis Tsamis 501ff9af4c4SNikita Popovdefine i8 @lrb_anyext(ptr %a, i64 %b) { 5021da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lrb_anyext: 5031da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 5041da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrb a0, a0, a1, 0 5051da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 5061da2921bSCraig Topper; 5071da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lrb_anyext: 5081da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 5091da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lrb a0, a0, a1, 0 5101da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 511ff9af4c4SNikita Popov %1 = getelementptr i8, ptr %a, i64 %b 512ff9af4c4SNikita Popov %2 = load i8, ptr %1, align 1 5131da2921bSCraig Topper ret i8 %2 5141da2921bSCraig Topper} 5151da2921bSCraig Topper 516ff9af4c4SNikita Popovdefine i64 @lrb(ptr %a, i64 %b) { 517f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrb: 518f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 519f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrb a1, a0, a1, 0 520f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 521f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 522f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 523f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 524f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 525f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 526f6262201SManolis Tsamis; 527f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrb: 528f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 529f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrb a0, a0, a1, 0 530f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 531f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 532ff9af4c4SNikita Popov %1 = getelementptr i8, ptr %a, i64 %b 533ff9af4c4SNikita Popov %2 = load i8, ptr %1, align 1 534f6262201SManolis Tsamis %3 = sext i8 %2 to i64 535f6262201SManolis Tsamis %4 = add i64 %3, %3 536f6262201SManolis Tsamis ret i64 %4 537f6262201SManolis Tsamis} 538f6262201SManolis Tsamis 539ff9af4c4SNikita Popovdefine i8 @lurb_anyext(ptr %a, i32 %b) { 5401da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lurb_anyext: 5411da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 5421da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrb a0, a0, a1, 0 5431da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 5441da2921bSCraig Topper; 5451da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lurb_anyext: 5461da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 5471da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lurb a0, a0, a1, 0 5481da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 5491da2921bSCraig Topper %1 = zext i32 %b to i64 550ff9af4c4SNikita Popov %2 = getelementptr i8, ptr %a, i64 %1 551ff9af4c4SNikita Popov %3 = load i8, ptr %2, align 1 5521da2921bSCraig Topper ret i8 %3 5531da2921bSCraig Topper} 5541da2921bSCraig Topper 555ff9af4c4SNikita Popovdefine i64 @lurb(ptr %a, i32 %b) { 556f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurb: 557f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 558f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrb a1, a0, a1, 0 559f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 560f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 561f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 562f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 563f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 564f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 565f6262201SManolis Tsamis; 566f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurb: 567f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 568f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurb a0, a0, a1, 0 569f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 570f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 571f6262201SManolis Tsamis %1 = zext i32 %b to i64 572ff9af4c4SNikita Popov %2 = getelementptr i8, ptr %a, i64 %1 573ff9af4c4SNikita Popov %3 = load i8, ptr %2, align 1 574f6262201SManolis Tsamis %4 = sext i8 %3 to i64 575f6262201SManolis Tsamis %5 = add i64 %4, %4 576f6262201SManolis Tsamis ret i64 %5 577f6262201SManolis Tsamis} 578f6262201SManolis Tsamis 579ff9af4c4SNikita Popovdefine i64 @lrbu(ptr %a, i64 %b) { 580f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrbu: 581f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 582f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrbu a1, a0, a1, 0 583f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 584f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 585f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 586f6262201SManolis Tsamis; 587f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrbu: 588f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 589f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrbu a0, a0, a1, 0 590f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 591f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 592ff9af4c4SNikita Popov %1 = getelementptr i8, ptr %a, i64 %b 593ff9af4c4SNikita Popov %2 = load i8, ptr %1, align 1 594f6262201SManolis Tsamis %3 = zext i8 %2 to i64 595f6262201SManolis Tsamis %4 = add i64 %3, %3 596f6262201SManolis Tsamis ret i64 %4 597f6262201SManolis Tsamis} 598f6262201SManolis Tsamis 599ff9af4c4SNikita Popovdefine i64 @lurbu(ptr %a, i32 %b) { 600f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurbu: 601f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 602f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrbu a1, a0, a1, 0 603f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 604f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 605f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 606f6262201SManolis Tsamis; 607f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurbu: 608f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 609f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurbu a0, a0, a1, 0 610f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 611f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 612f6262201SManolis Tsamis %1 = zext i32 %b to i64 613ff9af4c4SNikita Popov %2 = getelementptr i8, ptr %a, i64 %1 614ff9af4c4SNikita Popov %3 = load i8, ptr %2, align 1 615f6262201SManolis Tsamis %4 = zext i8 %3 to i64 616f6262201SManolis Tsamis %5 = add i64 %4, %4 617f6262201SManolis Tsamis ret i64 %5 618f6262201SManolis Tsamis} 619f6262201SManolis Tsamis 620ff9af4c4SNikita Popovdefine i16 @lrh_anyext(ptr %a, i64 %b) { 6211da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lrh_anyext: 6221da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 6231da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrh a0, a0, a1, 1 6241da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 6251da2921bSCraig Topper; 6261da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lrh_anyext: 6271da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 6281da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lrh a0, a0, a1, 1 6291da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 630ff9af4c4SNikita Popov %1 = getelementptr i16, ptr %a, i64 %b 631ff9af4c4SNikita Popov %2 = load i16, ptr %1, align 2 6321da2921bSCraig Topper ret i16 %2 6331da2921bSCraig Topper} 6341da2921bSCraig Topper 635ff9af4c4SNikita Popovdefine i64 @lrh(ptr %a, i64 %b) { 636f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrh: 637f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 638f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrh a1, a0, a1, 1 639f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 640f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 641f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 642f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 643f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 644f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 645f6262201SManolis Tsamis; 646f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrh: 647f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 648f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrh a0, a0, a1, 1 649f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 650f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 651ff9af4c4SNikita Popov %1 = getelementptr i16, ptr %a, i64 %b 652ff9af4c4SNikita Popov %2 = load i16, ptr %1, align 2 653f6262201SManolis Tsamis %3 = sext i16 %2 to i64 654f6262201SManolis Tsamis %4 = add i64 %3, %3 655f6262201SManolis Tsamis ret i64 %4 656f6262201SManolis Tsamis} 657f6262201SManolis Tsamis 658ff9af4c4SNikita Popovdefine i16 @lurh_anyext(ptr %a, i32 %b) { 6591da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lurh_anyext: 6601da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 6611da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrh a0, a0, a1, 1 6621da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 6631da2921bSCraig Topper; 6641da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lurh_anyext: 6651da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 6661da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lurh a0, a0, a1, 1 6671da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 6681da2921bSCraig Topper %1 = zext i32 %b to i64 669ff9af4c4SNikita Popov %2 = getelementptr i16, ptr %a, i64 %1 670ff9af4c4SNikita Popov %3 = load i16, ptr %2, align 2 6711da2921bSCraig Topper ret i16 %3 6721da2921bSCraig Topper} 6731da2921bSCraig Topper 674ff9af4c4SNikita Popovdefine i64 @lurh(ptr %a, i32 %b) { 675f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurh: 676f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 677f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrh a1, a0, a1, 1 678f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 679f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 680f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 681f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 682f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 683f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 684f6262201SManolis Tsamis; 685f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurh: 686f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 687f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurh a0, a0, a1, 1 688f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 689f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 690f6262201SManolis Tsamis %1 = zext i32 %b to i64 691ff9af4c4SNikita Popov %2 = getelementptr i16, ptr %a, i64 %1 692ff9af4c4SNikita Popov %3 = load i16, ptr %2, align 2 693f6262201SManolis Tsamis %4 = sext i16 %3 to i64 694f6262201SManolis Tsamis %5 = add i64 %4, %4 695f6262201SManolis Tsamis ret i64 %5 696f6262201SManolis Tsamis} 697f6262201SManolis Tsamis 698ff9af4c4SNikita Popovdefine i64 @lrhu(ptr %a, i64 %b) { 699f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrhu: 700f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 701f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrhu a1, a0, a1, 1 702f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 703f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 704f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 705f6262201SManolis Tsamis; 706f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrhu: 707f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 708f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrhu a0, a0, a1, 1 709f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 710f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 711ff9af4c4SNikita Popov %1 = getelementptr i16, ptr %a, i64 %b 712ff9af4c4SNikita Popov %2 = load i16, ptr %1, align 2 713f6262201SManolis Tsamis %3 = zext i16 %2 to i64 714f6262201SManolis Tsamis %4 = add i64 %3, %3 715f6262201SManolis Tsamis ret i64 %4 716f6262201SManolis Tsamis} 717f6262201SManolis Tsamis 718ff9af4c4SNikita Popovdefine i64 @lurhu(ptr %a, i32 %b) { 719f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurhu: 720f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 721f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrhu a1, a0, a1, 1 722f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 723f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 724f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 725f6262201SManolis Tsamis; 726f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurhu: 727f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 728f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurhu a0, a0, a1, 1 729f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 730f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 731f6262201SManolis Tsamis %1 = zext i32 %b to i64 732ff9af4c4SNikita Popov %2 = getelementptr i16, ptr %a, i64 %1 733ff9af4c4SNikita Popov %3 = load i16, ptr %2, align 2 734f6262201SManolis Tsamis %4 = zext i16 %3 to i64 735f6262201SManolis Tsamis %5 = add i64 %4, %4 736f6262201SManolis Tsamis ret i64 %5 737f6262201SManolis Tsamis} 738f6262201SManolis Tsamis 739ff9af4c4SNikita Popovdefine i32 @lrw_anyext(ptr %a, i64 %b) { 7401da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lrw_anyext: 7411da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 7421da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrw a0, a0, a1, 2 7431da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 7441da2921bSCraig Topper; 7451da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lrw_anyext: 7461da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 7471da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lrw a0, a0, a1, 2 7481da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 749ff9af4c4SNikita Popov %1 = getelementptr i32, ptr %a, i64 %b 750ff9af4c4SNikita Popov %2 = load i32, ptr %1, align 4 7511da2921bSCraig Topper ret i32 %2 7521da2921bSCraig Topper} 7531da2921bSCraig Topper 754ff9af4c4SNikita Popovdefine i64 @lrw(ptr %a, i64 %b) { 755f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrw: 756f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 757f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 2 758f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 759f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 760f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 761f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 762f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 763f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 764f6262201SManolis Tsamis; 765f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrw: 766f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 767f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrw a0, a0, a1, 2 768f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 769f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 770ff9af4c4SNikita Popov %1 = getelementptr i32, ptr %a, i64 %b 771ff9af4c4SNikita Popov %2 = load i32, ptr %1, align 4 772f6262201SManolis Tsamis %3 = sext i32 %2 to i64 773f6262201SManolis Tsamis %4 = add i64 %3, %3 774f6262201SManolis Tsamis ret i64 %4 775f6262201SManolis Tsamis} 776f6262201SManolis Tsamis 777ff9af4c4SNikita Popovdefine i32 @lurw_anyext(ptr %a, i32 %b) { 7781da2921bSCraig Topper; RV32XTHEADMEMIDX-LABEL: lurw_anyext: 7791da2921bSCraig Topper; RV32XTHEADMEMIDX: # %bb.0: 7801da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: th.lrw a0, a0, a1, 2 7811da2921bSCraig Topper; RV32XTHEADMEMIDX-NEXT: ret 7821da2921bSCraig Topper; 7831da2921bSCraig Topper; RV64XTHEADMEMIDX-LABEL: lurw_anyext: 7841da2921bSCraig Topper; RV64XTHEADMEMIDX: # %bb.0: 7851da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: th.lurw a0, a0, a1, 2 7861da2921bSCraig Topper; RV64XTHEADMEMIDX-NEXT: ret 7871da2921bSCraig Topper %1 = zext i32 %b to i64 788ff9af4c4SNikita Popov %2 = getelementptr i32, ptr %a, i64 %1 789ff9af4c4SNikita Popov %3 = load i32, ptr %2, align 4 7901da2921bSCraig Topper ret i32 %3 7911da2921bSCraig Topper} 7921da2921bSCraig Topper 793ff9af4c4SNikita Popovdefine i64 @lurw(ptr %a, i32 %b) { 794f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurw: 795f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 796f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 2 797f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: srai a2, a1, 31 798f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 799f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 800f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 801f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 802f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 803f6262201SManolis Tsamis; 804f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurw: 805f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 806f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurw a0, a0, a1, 2 807f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 808f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 809f6262201SManolis Tsamis %1 = zext i32 %b to i64 810ff9af4c4SNikita Popov %2 = getelementptr i32, ptr %a, i64 %1 811ff9af4c4SNikita Popov %3 = load i32, ptr %2, align 4 812f6262201SManolis Tsamis %4 = sext i32 %3 to i64 813f6262201SManolis Tsamis %5 = add i64 %4, %4 814f6262201SManolis Tsamis ret i64 %5 815f6262201SManolis Tsamis} 816f6262201SManolis Tsamis 817ff9af4c4SNikita Popovdefine i64 @lrwu(ptr %a, i64 %b) { 818f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrwu: 819f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 820f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 2 821f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 822f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 823f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 824f6262201SManolis Tsamis; 825f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrwu: 826f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 827f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrwu a0, a0, a1, 2 828f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 829f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 830ff9af4c4SNikita Popov %1 = getelementptr i32, ptr %a, i64 %b 831ff9af4c4SNikita Popov %2 = load i32, ptr %1, align 4 832f6262201SManolis Tsamis %3 = zext i32 %2 to i64 833f6262201SManolis Tsamis %4 = add i64 %3, %3 834f6262201SManolis Tsamis ret i64 %4 835f6262201SManolis Tsamis} 836f6262201SManolis Tsamis 837ff9af4c4SNikita Popovdefine i64 @lurwu(ptr %a, i32 %b) { 838f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurwu: 839f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 840f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 2 841f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 842f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 843f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 844f6262201SManolis Tsamis; 845f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurwu: 846f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 847f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurwu a0, a0, a1, 2 848f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 849f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 850f6262201SManolis Tsamis %1 = zext i32 %b to i64 851ff9af4c4SNikita Popov %2 = getelementptr i32, ptr %a, i64 %1 852ff9af4c4SNikita Popov %3 = load i32, ptr %2, align 4 853f6262201SManolis Tsamis %4 = zext i32 %3 to i64 854f6262201SManolis Tsamis %5 = add i64 %4, %4 855f6262201SManolis Tsamis ret i64 %5 856f6262201SManolis Tsamis} 857f6262201SManolis Tsamis 858ff9af4c4SNikita Popovdefine i64 @lrd(ptr %a, i64 %b) { 859f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrd: 860f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 861f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a2, a1, 3 862f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 3 863f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a0, a2 864f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a2, 4(a0) 865f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 866f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 867f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 868f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 869f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 870f6262201SManolis Tsamis; 871f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrd: 872f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 873f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrd a0, a0, a1, 3 874f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 875f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 876ff9af4c4SNikita Popov %1 = getelementptr i64, ptr %a, i64 %b 877ff9af4c4SNikita Popov %2 = load i64, ptr %1, align 8 878f6262201SManolis Tsamis %3 = add i64 %2, %2 879f6262201SManolis Tsamis ret i64 %3 880f6262201SManolis Tsamis} 881f6262201SManolis Tsamis 882ff9af4c4SNikita Popovdefine i64 @lrd_2(ptr %a, i64 %b) { 883f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrd_2: 884f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 885f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: addi a2, a0, 96 886f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a2, a2, a1, 3 887f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: addi a0, a0, 100 888f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 3 889f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a2, a2 890f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a2, a0, a2 891f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a1 892f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 893f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 894f6262201SManolis Tsamis; 895f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrd_2: 896f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 897f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: addi a0, a0, 96 898f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lrd a0, a0, a1, 3 899f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 900f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 901f6262201SManolis Tsamis %1 = add i64 %b, 12 902ff9af4c4SNikita Popov %2 = getelementptr i64, ptr %a, i64 %1 903ff9af4c4SNikita Popov %3 = load i64, ptr %2, align 8 904f6262201SManolis Tsamis %4 = add i64 %3, %3 905f6262201SManolis Tsamis ret i64 %4 906f6262201SManolis Tsamis} 907f6262201SManolis Tsamis 908ff9af4c4SNikita Popovdefine i64 @lurd(ptr %a, i32 %b) { 909f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lurd: 910f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 911f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a2, a1, 3 912f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.lrw a1, a0, a1, 3 913f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a0, a2 914f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a2, 4(a0) 915f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a1 916f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sltu a1, a0, a1 917f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 918f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a2, a1 919f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 920f6262201SManolis Tsamis; 921f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lurd: 922f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 923f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.lurd a0, a0, a1, 3 924f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a0 925f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 926f6262201SManolis Tsamis %1 = zext i32 %b to i64 927ff9af4c4SNikita Popov %2 = getelementptr i64, ptr %a, i64 %1 928ff9af4c4SNikita Popov %3 = load i64, ptr %2, align 8 929f6262201SManolis Tsamis %4 = add i64 %3, %3 930f6262201SManolis Tsamis ret i64 %4 931f6262201SManolis Tsamis} 932f6262201SManolis Tsamis 933ff9af4c4SNikita Popovdefine void @srb(ptr %a, i64 %b, i8 %c) { 934f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: srb: 935f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 936f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a3 937f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srb a3, a0, a1, 0 938f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 939f6262201SManolis Tsamis; 940f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: srb: 941f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 942f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 943f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.srb a2, a0, a1, 0 944f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 945f6262201SManolis Tsamis %1 = add i8 %c, %c 946ff9af4c4SNikita Popov %2 = getelementptr i8, ptr %a, i64 %b 947ff9af4c4SNikita Popov store i8 %1, ptr %2, align 1 948f6262201SManolis Tsamis ret void 949f6262201SManolis Tsamis} 950f6262201SManolis Tsamis 951ff9af4c4SNikita Popovdefine void @surb(ptr %a, i32 %b, i8 %c) { 952f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: surb: 953f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 954f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 955f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srb a2, a0, a1, 0 956f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 957f6262201SManolis Tsamis; 958f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: surb: 959f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 960f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 961f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.surb a2, a0, a1, 0 962f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 963f6262201SManolis Tsamis %1 = zext i32 %b to i64 964f6262201SManolis Tsamis %2 = add i8 %c, %c 965ff9af4c4SNikita Popov %3 = getelementptr i8, ptr %a, i64 %1 966ff9af4c4SNikita Popov store i8 %2, ptr %3, align 1 967f6262201SManolis Tsamis ret void 968f6262201SManolis Tsamis} 969f6262201SManolis Tsamis 970ff9af4c4SNikita Popovdefine void @srh(ptr %a, i64 %b, i16 %c) { 971f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: srh: 972f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 973f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a3 974f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srh a3, a0, a1, 1 975f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 976f6262201SManolis Tsamis; 977f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: srh: 978f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 979f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 980f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.srh a2, a0, a1, 1 981f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 982f6262201SManolis Tsamis %1 = add i16 %c, %c 983ff9af4c4SNikita Popov %2 = getelementptr i16, ptr %a, i64 %b 984ff9af4c4SNikita Popov store i16 %1, ptr %2, align 2 985f6262201SManolis Tsamis ret void 986f6262201SManolis Tsamis} 987f6262201SManolis Tsamis 988ff9af4c4SNikita Popovdefine void @surh(ptr %a, i32 %b, i16 %c) { 989f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: surh: 990f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 991f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 992f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srh a2, a0, a1, 1 993f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 994f6262201SManolis Tsamis; 995f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: surh: 996f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 997f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 998f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.surh a2, a0, a1, 1 999f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1000f6262201SManolis Tsamis %1 = zext i32 %b to i64 1001f6262201SManolis Tsamis %2 = add i16 %c, %c 1002ff9af4c4SNikita Popov %3 = getelementptr i16, ptr %a, i64 %1 1003ff9af4c4SNikita Popov store i16 %2, ptr %3, align 2 1004f6262201SManolis Tsamis ret void 1005f6262201SManolis Tsamis} 1006f6262201SManolis Tsamis 1007ff9af4c4SNikita Popovdefine void @srw(ptr %a, i64 %b, i32 %c) { 1008f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: srw: 1009f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1010f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a3 1011f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srw a3, a0, a1, 2 1012f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1013f6262201SManolis Tsamis; 1014f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: srw: 1015f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1016f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 1017f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.srw a2, a0, a1, 2 1018f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1019f6262201SManolis Tsamis %1 = add i32 %c, %c 1020ff9af4c4SNikita Popov %2 = getelementptr i32, ptr %a, i64 %b 1021ff9af4c4SNikita Popov store i32 %1, ptr %2, align 4 1022f6262201SManolis Tsamis ret void 1023f6262201SManolis Tsamis} 1024f6262201SManolis Tsamis 1025ff9af4c4SNikita Popovdefine void @surw(ptr %a, i32 %b, i32 %c) { 1026f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: surw: 1027f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1028f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a2, a2 1029f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srw a2, a0, a1, 2 1030f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1031f6262201SManolis Tsamis; 1032f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: surw: 1033f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1034f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 1035f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.surw a2, a0, a1, 2 1036f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1037f6262201SManolis Tsamis %1 = zext i32 %b to i64 1038f6262201SManolis Tsamis %2 = add i32 %c, %c 1039ff9af4c4SNikita Popov %3 = getelementptr i32, ptr %a, i64 %1 1040ff9af4c4SNikita Popov store i32 %2, ptr %3, align 4 1041f6262201SManolis Tsamis ret void 1042f6262201SManolis Tsamis} 1043f6262201SManolis Tsamis 1044ff9af4c4SNikita Popovdefine void @srd(ptr %a, i64 %b, i64 %c) { 1045f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: srd: 1046f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1047f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a3, a3 1048f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a4, a4, a4 1049*9122c523SPengcheng Wang; RV32XTHEADMEMIDX-NEXT: sltu a3, a2, a3 1050f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a4, a3 1051f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a4, a1, 3 1052f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a4, a0, a4 1053f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srw a2, a0, a1, 3 1054f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a3, 4(a4) 1055f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1056f6262201SManolis Tsamis; 1057f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: srd: 1058f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1059f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 1060f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.srd a2, a0, a1, 3 1061f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1062f6262201SManolis Tsamis %1 = add i64 %c, %c 1063ff9af4c4SNikita Popov %2 = getelementptr i64, ptr %a, i64 %b 1064ff9af4c4SNikita Popov store i64 %1, ptr %2, align 8 1065f6262201SManolis Tsamis ret void 1066f6262201SManolis Tsamis} 1067f6262201SManolis Tsamis 1068ff9af4c4SNikita Popovdefine void @surd(ptr %a, i32 %b, i64 %c) { 1069f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: surd: 1070f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1071f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a4, a2, a2 1072f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a3, a3 1073*9122c523SPengcheng Wang; RV32XTHEADMEMIDX-NEXT: sltu a2, a4, a2 1074f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a2, a3, a2 1075f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a3, a1, 3 1076f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a3, a0, a3 1077f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.srw a4, a0, a1, 3 1078f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: sw a2, 4(a3) 1079f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1080f6262201SManolis Tsamis; 1081f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: surd: 1082f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1083f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a2, a2, a2 1084f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.surd a2, a0, a1, 3 1085f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1086f6262201SManolis Tsamis %1 = zext i32 %b to i64 1087f6262201SManolis Tsamis %2 = add i64 %c, %c 1088ff9af4c4SNikita Popov %3 = getelementptr i64, ptr %a, i64 %1 1089ff9af4c4SNikita Popov store i64 %2, ptr %3, align 8 1090f6262201SManolis Tsamis ret void 1091f6262201SManolis Tsamis} 1092f6262201SManolis Tsamis 1093ff9af4c4SNikita Popovdefine ptr @test_simm5(ptr %base, i32 %a, i32 %b) { 1094f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: test_simm5: 1095f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1096f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a2 1097f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: th.swia a1, (a0), -12, 2 1098f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1099f6262201SManolis Tsamis; 1100f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: test_simm5: 1101f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1102f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a1, a1, a2 1103f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: th.swia a1, (a0), -12, 2 1104f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1105ff9af4c4SNikita Popov %addr.1 = getelementptr i32, ptr %base, i32 -12 1106f6262201SManolis Tsamis %res = add i32 %a, %b 1107ff9af4c4SNikita Popov store i32 %res, ptr %base 1108ff9af4c4SNikita Popov ret ptr %addr.1 1109f6262201SManolis Tsamis} 1110f6262201SManolis Tsamis 1111ff9af4c4SNikita Popovdefine i64 @lrd_large_shift(ptr %a, i64 %b) { 1112f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrd_large_shift: 1113f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1114f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a1, a1, 5 1115f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a1, a0 1116f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a0, 384(a1) 1117f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a1, 388(a1) 1118f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1119f6262201SManolis Tsamis; 1120f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrd_large_shift: 1121f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1122f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: slli a1, a1, 5 1123f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a1, a0 1124f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ld a0, 384(a0) 1125f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1126f6262201SManolis Tsamis %1 = add i64 %b, 12 1127f6262201SManolis Tsamis %2 = shl i64 %1, 2 1128ff9af4c4SNikita Popov %3 = getelementptr i64, ptr %a, i64 %2 1129ff9af4c4SNikita Popov %4 = load i64, ptr %3, align 8 1130f6262201SManolis Tsamis ret i64 %4 1131f6262201SManolis Tsamis} 1132f6262201SManolis Tsamis 1133ff9af4c4SNikita Popovdefine i64 @lrd_large_offset(ptr %a, i64 %b) { 1134f6262201SManolis Tsamis; RV32XTHEADMEMIDX-LABEL: lrd_large_offset: 1135f6262201SManolis Tsamis; RV32XTHEADMEMIDX: # %bb.0: 1136f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: slli a1, a1, 3 1137f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a0, a1, a0 1138f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lui a1, 23 1139f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: addi a1, a1, 1792 1140f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: add a1, a0, a1 1141f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a0, 0(a1) 1142f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: lw a1, 4(a1) 1143f6262201SManolis Tsamis; RV32XTHEADMEMIDX-NEXT: ret 1144f6262201SManolis Tsamis; 1145f6262201SManolis Tsamis; RV64XTHEADMEMIDX-LABEL: lrd_large_offset: 1146f6262201SManolis Tsamis; RV64XTHEADMEMIDX: # %bb.0: 1147f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: slli a1, a1, 3 1148f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a1, a0 1149f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: lui a1, 23 1150f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: add a0, a0, a1 1151f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ld a0, 1792(a0) 1152f6262201SManolis Tsamis; RV64XTHEADMEMIDX-NEXT: ret 1153f6262201SManolis Tsamis %1 = add i64 %b, 12000 1154ff9af4c4SNikita Popov %2 = getelementptr i64, ptr %a, i64 %1 1155ff9af4c4SNikita Popov %3 = load i64, ptr %2, align 8 1156f6262201SManolis Tsamis ret i64 %3 1157f6262201SManolis Tsamis} 1158