1120c5115SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2120c5115SMatt Arsenault; RUN: llc -global-isel -mtriple=mipsel-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32 3120c5115SMatt Arsenault 4120c5115SMatt Arsenault; -------------------------------------------------------------------- 5120c5115SMatt Arsenault; unordered 6120c5115SMatt Arsenault; -------------------------------------------------------------------- 7120c5115SMatt Arsenault 88663926aSNikita Popovdefine i8 @atomic_load_unordered_i8(ptr %ptr) { 9120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8: 10120c5115SMatt Arsenault; MIPS32: # %bb.0: 11120c5115SMatt Arsenault; MIPS32-NEXT: lbu $2, 0($4) 12120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 13120c5115SMatt Arsenault; MIPS32-NEXT: nop 148663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 15120c5115SMatt Arsenault ret i8 %load 16120c5115SMatt Arsenault} 17120c5115SMatt Arsenault 188663926aSNikita Popovdefine i32 @atomic_load_unordered_i8_sext_i32(ptr %ptr) { 19120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i32: 20120c5115SMatt Arsenault; MIPS32: # %bb.0: 21120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 22120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 23120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 24120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 258663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 26120c5115SMatt Arsenault %sext = sext i8 %load to i32 27120c5115SMatt Arsenault ret i32 %sext 28120c5115SMatt Arsenault} 29120c5115SMatt Arsenault 308663926aSNikita Popovdefine i16 @atomic_load_unordered_i8_sext_i16(ptr %ptr) { 31120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i16: 32120c5115SMatt Arsenault; MIPS32: # %bb.0: 33120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 34120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 35120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 36120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 378663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 38120c5115SMatt Arsenault %sext = sext i8 %load to i16 39120c5115SMatt Arsenault ret i16 %sext 40120c5115SMatt Arsenault} 41120c5115SMatt Arsenault 428663926aSNikita Popovdefine i64 @atomic_load_unordered_i8_sext_i64(ptr %ptr) { 43120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i64: 44120c5115SMatt Arsenault; MIPS32: # %bb.0: 45120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 46120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 47120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 48120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 49120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 508663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 51120c5115SMatt Arsenault %sext = sext i8 %load to i64 52120c5115SMatt Arsenault ret i64 %sext 53120c5115SMatt Arsenault} 54120c5115SMatt Arsenault 558663926aSNikita Popovdefine i32 @atomic_load_unordered_i8_zext_i32(ptr %ptr) { 56120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i32: 57120c5115SMatt Arsenault; MIPS32: # %bb.0: 58120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 59120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 60120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 618663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 62120c5115SMatt Arsenault %zext = zext i8 %load to i32 63120c5115SMatt Arsenault ret i32 %zext 64120c5115SMatt Arsenault} 65120c5115SMatt Arsenault 668663926aSNikita Popovdefine i16 @atomic_load_unordered_i8_zext_i16(ptr %ptr) { 67120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i16: 68120c5115SMatt Arsenault; MIPS32: # %bb.0: 69120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 70120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 71120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 728663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 73120c5115SMatt Arsenault %zext = zext i8 %load to i16 74120c5115SMatt Arsenault ret i16 %zext 75120c5115SMatt Arsenault} 76120c5115SMatt Arsenault 778663926aSNikita Popovdefine i64 @atomic_load_unordered_i8_zext_i64(ptr %ptr) { 78120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i64: 79120c5115SMatt Arsenault; MIPS32: # %bb.0: 80120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 81120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 82120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 83120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 848663926aSNikita Popov %load = load atomic i8, ptr %ptr unordered, align 1 85120c5115SMatt Arsenault %zext = zext i8 %load to i64 86120c5115SMatt Arsenault ret i64 %zext 87120c5115SMatt Arsenault} 88120c5115SMatt Arsenault 898663926aSNikita Popovdefine i16 @atomic_load_unordered_i16(ptr %ptr) { 90120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16: 91120c5115SMatt Arsenault; MIPS32: # %bb.0: 92120c5115SMatt Arsenault; MIPS32-NEXT: lhu $2, 0($4) 93120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 94120c5115SMatt Arsenault; MIPS32-NEXT: nop 958663926aSNikita Popov %load = load atomic i16, ptr %ptr unordered, align 2 96120c5115SMatt Arsenault ret i16 %load 97120c5115SMatt Arsenault} 98120c5115SMatt Arsenault 998663926aSNikita Popovdefine i32 @atomic_load_unordered_i16_sext_i32(ptr %ptr) { 100120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_sext_i32: 101120c5115SMatt Arsenault; MIPS32: # %bb.0: 102120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 103120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 104120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 105120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 1068663926aSNikita Popov %load = load atomic i16, ptr %ptr unordered, align 2 107120c5115SMatt Arsenault %sext = sext i16 %load to i32 108120c5115SMatt Arsenault ret i32 %sext 109120c5115SMatt Arsenault} 110120c5115SMatt Arsenault 1118663926aSNikita Popovdefine i64 @atomic_load_unordered_i16_sext_i64(ptr %ptr) { 112120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_sext_i64: 113120c5115SMatt Arsenault; MIPS32: # %bb.0: 114120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 115120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 116120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 117120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 118120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 1198663926aSNikita Popov %load = load atomic i16, ptr %ptr unordered, align 2 120120c5115SMatt Arsenault %sext = sext i16 %load to i64 121120c5115SMatt Arsenault ret i64 %sext 122120c5115SMatt Arsenault} 123120c5115SMatt Arsenault 1248663926aSNikita Popovdefine i32 @atomic_load_unordered_i16_zext_i32(ptr %ptr) { 125120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_zext_i32: 126120c5115SMatt Arsenault; MIPS32: # %bb.0: 127120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 128120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 129120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 1308663926aSNikita Popov %load = load atomic i16, ptr %ptr unordered, align 2 131120c5115SMatt Arsenault %zext = zext i16 %load to i32 132120c5115SMatt Arsenault ret i32 %zext 133120c5115SMatt Arsenault} 134120c5115SMatt Arsenault 1358663926aSNikita Popovdefine i64 @atomic_load_unordered_i16_zext_i64(ptr %ptr) { 136120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_zext_i64: 137120c5115SMatt Arsenault; MIPS32: # %bb.0: 138120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 139120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 140120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 141120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 1428663926aSNikita Popov %load = load atomic i16, ptr %ptr unordered, align 2 143120c5115SMatt Arsenault %zext = zext i16 %load to i64 144120c5115SMatt Arsenault ret i64 %zext 145120c5115SMatt Arsenault} 146120c5115SMatt Arsenault 1478663926aSNikita Popovdefine i32 @atomic_load_unordered_i32(ptr %ptr) { 148120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i32: 149120c5115SMatt Arsenault; MIPS32: # %bb.0: 150120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 0($4) 151120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 152120c5115SMatt Arsenault; MIPS32-NEXT: nop 1538663926aSNikita Popov %load = load atomic i32, ptr %ptr unordered, align 4 154120c5115SMatt Arsenault ret i32 %load 155120c5115SMatt Arsenault} 156120c5115SMatt Arsenault 1578663926aSNikita Popovdefine i64 @atomic_load_unordered_i64(ptr %ptr) { 158120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i64: 159120c5115SMatt Arsenault; MIPS32: # %bb.0: 160*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 161*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 162*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 163*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 164*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 165*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 0 166*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 167120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 168*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 1698663926aSNikita Popov %load = load atomic i64, ptr %ptr unordered, align 8 170120c5115SMatt Arsenault ret i64 %load 171120c5115SMatt Arsenault} 172120c5115SMatt Arsenault 1738663926aSNikita Popovdefine float @atomic_load_unordered_f32(ptr %ptr) { 174120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_f32: 175120c5115SMatt Arsenault; MIPS32: # %bb.0: 176120c5115SMatt Arsenault; MIPS32-NEXT: lwc1 $f0, 64($4) 177120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 178120c5115SMatt Arsenault; MIPS32-NEXT: nop 1798663926aSNikita Popov %gep = getelementptr inbounds float, ptr %ptr, i32 16 1808663926aSNikita Popov %load = load atomic float, ptr %gep unordered, align 4 181120c5115SMatt Arsenault ret float %load 182120c5115SMatt Arsenault} 183120c5115SMatt Arsenault 1848663926aSNikita Popovdefine double @atomic_load_unordered_f64(ptr %ptr) { 185120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_f64: 186120c5115SMatt Arsenault; MIPS32: # %bb.0: 187*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 188*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 189*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 190*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 191*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 0 192*7973d519SBrad Smith; MIPS32-NEXT: ori $1, $zero, 128 193*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 194*7973d519SBrad Smith; MIPS32-NEXT: addu $4, $4, $1 195*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $2, $f0 196*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $3, $f1 197*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 198120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 199*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 2008663926aSNikita Popov %gep = getelementptr inbounds double, ptr %ptr, i32 16 2018663926aSNikita Popov %load = load atomic double, ptr %gep unordered, align 8 202120c5115SMatt Arsenault ret double %load 203120c5115SMatt Arsenault} 204120c5115SMatt Arsenault 2058663926aSNikita Popovdefine ptr @atomic_load_unordered_p0i8(ptr %ptr) { 206120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_p0i8: 207120c5115SMatt Arsenault; MIPS32: # %bb.0: 208120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 64($4) 209120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 210120c5115SMatt Arsenault; MIPS32-NEXT: nop 2118663926aSNikita Popov %gep = getelementptr inbounds ptr, ptr %ptr, i32 16 2128663926aSNikita Popov %load = load atomic ptr, ptr %gep unordered, align 4 2138663926aSNikita Popov ret ptr %load 214120c5115SMatt Arsenault} 215120c5115SMatt Arsenault 216120c5115SMatt Arsenault; -------------------------------------------------------------------- 217120c5115SMatt Arsenault; monotonic 218120c5115SMatt Arsenault; -------------------------------------------------------------------- 219120c5115SMatt Arsenault 2208663926aSNikita Popovdefine i8 @atomic_load_monotonic_i8(ptr %ptr) { 221120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8: 222120c5115SMatt Arsenault; MIPS32: # %bb.0: 223120c5115SMatt Arsenault; MIPS32-NEXT: lbu $2, 0($4) 224120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 225120c5115SMatt Arsenault; MIPS32-NEXT: nop 2268663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 227120c5115SMatt Arsenault ret i8 %load 228120c5115SMatt Arsenault} 229120c5115SMatt Arsenault 2308663926aSNikita Popovdefine i32 @atomic_load_monotonic_i8_sext_i32(ptr %ptr) { 231120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i32: 232120c5115SMatt Arsenault; MIPS32: # %bb.0: 233120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 234120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 235120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 236120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 2378663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 238120c5115SMatt Arsenault %sext = sext i8 %load to i32 239120c5115SMatt Arsenault ret i32 %sext 240120c5115SMatt Arsenault} 241120c5115SMatt Arsenault 2428663926aSNikita Popovdefine i16 @atomic_load_monotonic_i8_sext_i16(ptr %ptr) { 243120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i16: 244120c5115SMatt Arsenault; MIPS32: # %bb.0: 245120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 246120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 247120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 248120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 2498663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 250120c5115SMatt Arsenault %sext = sext i8 %load to i16 251120c5115SMatt Arsenault ret i16 %sext 252120c5115SMatt Arsenault} 253120c5115SMatt Arsenault 2548663926aSNikita Popovdefine i64 @atomic_load_monotonic_i8_sext_i64(ptr %ptr) { 255120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i64: 256120c5115SMatt Arsenault; MIPS32: # %bb.0: 257120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 258120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 259120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 260120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 261120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 2628663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 263120c5115SMatt Arsenault %sext = sext i8 %load to i64 264120c5115SMatt Arsenault ret i64 %sext 265120c5115SMatt Arsenault} 266120c5115SMatt Arsenault 2678663926aSNikita Popovdefine i32 @atomic_load_monotonic_i8_zext_i32(ptr %ptr) { 268120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i32: 269120c5115SMatt Arsenault; MIPS32: # %bb.0: 270120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 271120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 272120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 2738663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 274120c5115SMatt Arsenault %zext = zext i8 %load to i32 275120c5115SMatt Arsenault ret i32 %zext 276120c5115SMatt Arsenault} 277120c5115SMatt Arsenault 2788663926aSNikita Popovdefine i16 @atomic_load_monotonic_i8_zext_i16(ptr %ptr) { 279120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i16: 280120c5115SMatt Arsenault; MIPS32: # %bb.0: 281120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 282120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 283120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 2848663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 285120c5115SMatt Arsenault %zext = zext i8 %load to i16 286120c5115SMatt Arsenault ret i16 %zext 287120c5115SMatt Arsenault} 288120c5115SMatt Arsenault 2898663926aSNikita Popovdefine i64 @atomic_load_monotonic_i8_zext_i64(ptr %ptr) { 290120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i64: 291120c5115SMatt Arsenault; MIPS32: # %bb.0: 292120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 293120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 294120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 295120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 2968663926aSNikita Popov %load = load atomic i8, ptr %ptr monotonic, align 1 297120c5115SMatt Arsenault %zext = zext i8 %load to i64 298120c5115SMatt Arsenault ret i64 %zext 299120c5115SMatt Arsenault} 300120c5115SMatt Arsenault 3018663926aSNikita Popovdefine i16 @atomic_load_monotonic_i16(ptr %ptr) { 302120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16: 303120c5115SMatt Arsenault; MIPS32: # %bb.0: 304120c5115SMatt Arsenault; MIPS32-NEXT: lhu $2, 0($4) 305120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 306120c5115SMatt Arsenault; MIPS32-NEXT: nop 3078663926aSNikita Popov %load = load atomic i16, ptr %ptr monotonic, align 2 308120c5115SMatt Arsenault ret i16 %load 309120c5115SMatt Arsenault} 310120c5115SMatt Arsenault 3118663926aSNikita Popovdefine i32 @atomic_load_monotonic_i16_sext_i32(ptr %ptr) { 312120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_sext_i32: 313120c5115SMatt Arsenault; MIPS32: # %bb.0: 314120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 315120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 316120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 317120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 3188663926aSNikita Popov %load = load atomic i16, ptr %ptr monotonic, align 2 319120c5115SMatt Arsenault %sext = sext i16 %load to i32 320120c5115SMatt Arsenault ret i32 %sext 321120c5115SMatt Arsenault} 322120c5115SMatt Arsenault 3238663926aSNikita Popovdefine i64 @atomic_load_monotonic_i16_sext_i64(ptr %ptr) { 324120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_sext_i64: 325120c5115SMatt Arsenault; MIPS32: # %bb.0: 326120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 327120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 328120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 329120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 330120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 3318663926aSNikita Popov %load = load atomic i16, ptr %ptr monotonic, align 2 332120c5115SMatt Arsenault %sext = sext i16 %load to i64 333120c5115SMatt Arsenault ret i64 %sext 334120c5115SMatt Arsenault} 335120c5115SMatt Arsenault 3368663926aSNikita Popovdefine i32 @atomic_load_monotonic_i16_zext_i32(ptr %ptr) { 337120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_zext_i32: 338120c5115SMatt Arsenault; MIPS32: # %bb.0: 339120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 340120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 341120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 3428663926aSNikita Popov %load = load atomic i16, ptr %ptr monotonic, align 2 343120c5115SMatt Arsenault %zext = zext i16 %load to i32 344120c5115SMatt Arsenault ret i32 %zext 345120c5115SMatt Arsenault} 346120c5115SMatt Arsenault 3478663926aSNikita Popovdefine i64 @atomic_load_monotonic_i16_zext_i64(ptr %ptr) { 348120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_zext_i64: 349120c5115SMatt Arsenault; MIPS32: # %bb.0: 350120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 351120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 352120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 353120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 3548663926aSNikita Popov %load = load atomic i16, ptr %ptr monotonic, align 2 355120c5115SMatt Arsenault %zext = zext i16 %load to i64 356120c5115SMatt Arsenault ret i64 %zext 357120c5115SMatt Arsenault} 358120c5115SMatt Arsenault 3598663926aSNikita Popovdefine i32 @atomic_load_monotonic_i32(ptr %ptr) { 360120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i32: 361120c5115SMatt Arsenault; MIPS32: # %bb.0: 362120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 0($4) 363120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 364120c5115SMatt Arsenault; MIPS32-NEXT: nop 3658663926aSNikita Popov %load = load atomic i32, ptr %ptr monotonic, align 4 366120c5115SMatt Arsenault ret i32 %load 367120c5115SMatt Arsenault} 368120c5115SMatt Arsenault 3698663926aSNikita Popovdefine i64 @atomic_load_monotonic_i64(ptr %ptr) { 370120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i64: 371120c5115SMatt Arsenault; MIPS32: # %bb.0: 372*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 373*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 374*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 375*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 376*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 377*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 0 378*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 379120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 380*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 3818663926aSNikita Popov %load = load atomic i64, ptr %ptr monotonic, align 8 382120c5115SMatt Arsenault ret i64 %load 383120c5115SMatt Arsenault} 384120c5115SMatt Arsenault 3858663926aSNikita Popovdefine float @atomic_load_monotonic_f32(ptr %ptr) { 386120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_f32: 387120c5115SMatt Arsenault; MIPS32: # %bb.0: 388120c5115SMatt Arsenault; MIPS32-NEXT: lwc1 $f0, 64($4) 389120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 390120c5115SMatt Arsenault; MIPS32-NEXT: nop 3918663926aSNikita Popov %gep = getelementptr inbounds float, ptr %ptr, i32 16 3928663926aSNikita Popov %load = load atomic float, ptr %gep monotonic, align 4 393120c5115SMatt Arsenault ret float %load 394120c5115SMatt Arsenault} 395120c5115SMatt Arsenault 3968663926aSNikita Popovdefine double @atomic_load_monotonic_f64(ptr %ptr) { 397120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_f64: 398120c5115SMatt Arsenault; MIPS32: # %bb.0: 399*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 400*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 401*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 402*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 403*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 0 404*7973d519SBrad Smith; MIPS32-NEXT: ori $1, $zero, 128 405*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 406*7973d519SBrad Smith; MIPS32-NEXT: addu $4, $4, $1 407*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $2, $f0 408*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $3, $f1 409*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 410120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 411*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 4128663926aSNikita Popov %gep = getelementptr inbounds double, ptr %ptr, i32 16 4138663926aSNikita Popov %load = load atomic double, ptr %gep monotonic, align 8 414120c5115SMatt Arsenault ret double %load 415120c5115SMatt Arsenault} 416120c5115SMatt Arsenault 4178663926aSNikita Popovdefine ptr @atomic_load_monotonic_p0i8(ptr %ptr) { 418120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_p0i8: 419120c5115SMatt Arsenault; MIPS32: # %bb.0: 420120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 64($4) 421120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 422120c5115SMatt Arsenault; MIPS32-NEXT: nop 4238663926aSNikita Popov %gep = getelementptr inbounds ptr, ptr %ptr, i32 16 4248663926aSNikita Popov %load = load atomic ptr, ptr %gep monotonic, align 4 4258663926aSNikita Popov ret ptr %load 426120c5115SMatt Arsenault} 427120c5115SMatt Arsenault 428120c5115SMatt Arsenault; -------------------------------------------------------------------- 429120c5115SMatt Arsenault; acquire 430120c5115SMatt Arsenault; -------------------------------------------------------------------- 431120c5115SMatt Arsenault 4328663926aSNikita Popovdefine i8 @atomic_load_acquire_i8(ptr %ptr) { 433120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8: 434120c5115SMatt Arsenault; MIPS32: # %bb.0: 435120c5115SMatt Arsenault; MIPS32-NEXT: lbu $2, 0($4) 436120c5115SMatt Arsenault; MIPS32-NEXT: sync 437120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 438120c5115SMatt Arsenault; MIPS32-NEXT: nop 4398663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 440120c5115SMatt Arsenault ret i8 %load 441120c5115SMatt Arsenault} 442120c5115SMatt Arsenault 4438663926aSNikita Popovdefine i32 @atomic_load_acquire_i8_sext_i32(ptr %ptr) { 444120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i32: 445120c5115SMatt Arsenault; MIPS32: # %bb.0: 446120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 447120c5115SMatt Arsenault; MIPS32-NEXT: sync 448120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 449120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 450120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 4518663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 452120c5115SMatt Arsenault %sext = sext i8 %load to i32 453120c5115SMatt Arsenault ret i32 %sext 454120c5115SMatt Arsenault} 455120c5115SMatt Arsenault 4568663926aSNikita Popovdefine i16 @atomic_load_acquire_i8_sext_i16(ptr %ptr) { 457120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i16: 458120c5115SMatt Arsenault; MIPS32: # %bb.0: 459120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 460120c5115SMatt Arsenault; MIPS32-NEXT: sync 461120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 462120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 463120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 4648663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 465120c5115SMatt Arsenault %sext = sext i8 %load to i16 466120c5115SMatt Arsenault ret i16 %sext 467120c5115SMatt Arsenault} 468120c5115SMatt Arsenault 4698663926aSNikita Popovdefine i64 @atomic_load_acquire_i8_sext_i64(ptr %ptr) { 470120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i64: 471120c5115SMatt Arsenault; MIPS32: # %bb.0: 472120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 473120c5115SMatt Arsenault; MIPS32-NEXT: sync 474120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 475120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 476120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 477120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 4788663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 479120c5115SMatt Arsenault %sext = sext i8 %load to i64 480120c5115SMatt Arsenault ret i64 %sext 481120c5115SMatt Arsenault} 482120c5115SMatt Arsenault 4838663926aSNikita Popovdefine i32 @atomic_load_acquire_i8_zext_i32(ptr %ptr) { 484120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i32: 485120c5115SMatt Arsenault; MIPS32: # %bb.0: 486120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 487120c5115SMatt Arsenault; MIPS32-NEXT: sync 488120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 489120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 4908663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 491120c5115SMatt Arsenault %zext = zext i8 %load to i32 492120c5115SMatt Arsenault ret i32 %zext 493120c5115SMatt Arsenault} 494120c5115SMatt Arsenault 4958663926aSNikita Popovdefine i16 @atomic_load_acquire_i8_zext_i16(ptr %ptr) { 496120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i16: 497120c5115SMatt Arsenault; MIPS32: # %bb.0: 498120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 499120c5115SMatt Arsenault; MIPS32-NEXT: sync 500120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 501120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 5028663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 503120c5115SMatt Arsenault %zext = zext i8 %load to i16 504120c5115SMatt Arsenault ret i16 %zext 505120c5115SMatt Arsenault} 506120c5115SMatt Arsenault 5078663926aSNikita Popovdefine i64 @atomic_load_acquire_i8_zext_i64(ptr %ptr) { 508120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i64: 509120c5115SMatt Arsenault; MIPS32: # %bb.0: 510120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 511120c5115SMatt Arsenault; MIPS32-NEXT: sync 512120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 513120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 514120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 5158663926aSNikita Popov %load = load atomic i8, ptr %ptr acquire, align 1 516120c5115SMatt Arsenault %zext = zext i8 %load to i64 517120c5115SMatt Arsenault ret i64 %zext 518120c5115SMatt Arsenault} 519120c5115SMatt Arsenault 5208663926aSNikita Popovdefine i16 @atomic_load_acquire_i16(ptr %ptr) { 521120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16: 522120c5115SMatt Arsenault; MIPS32: # %bb.0: 523120c5115SMatt Arsenault; MIPS32-NEXT: lhu $2, 0($4) 524120c5115SMatt Arsenault; MIPS32-NEXT: sync 525120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 526120c5115SMatt Arsenault; MIPS32-NEXT: nop 5278663926aSNikita Popov %load = load atomic i16, ptr %ptr acquire, align 2 528120c5115SMatt Arsenault ret i16 %load 529120c5115SMatt Arsenault} 530120c5115SMatt Arsenault 5318663926aSNikita Popovdefine i32 @atomic_load_acquire_i16_sext_i32(ptr %ptr) { 532120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_sext_i32: 533120c5115SMatt Arsenault; MIPS32: # %bb.0: 534120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 535120c5115SMatt Arsenault; MIPS32-NEXT: sync 536120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 537120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 538120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 5398663926aSNikita Popov %load = load atomic i16, ptr %ptr acquire, align 2 540120c5115SMatt Arsenault %sext = sext i16 %load to i32 541120c5115SMatt Arsenault ret i32 %sext 542120c5115SMatt Arsenault} 543120c5115SMatt Arsenault 5448663926aSNikita Popovdefine i64 @atomic_load_acquire_i16_sext_i64(ptr %ptr) { 545120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_sext_i64: 546120c5115SMatt Arsenault; MIPS32: # %bb.0: 547120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 548120c5115SMatt Arsenault; MIPS32-NEXT: sync 549120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 550120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 551120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 552120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 5538663926aSNikita Popov %load = load atomic i16, ptr %ptr acquire, align 2 554120c5115SMatt Arsenault %sext = sext i16 %load to i64 555120c5115SMatt Arsenault ret i64 %sext 556120c5115SMatt Arsenault} 557120c5115SMatt Arsenault 5588663926aSNikita Popovdefine i32 @atomic_load_acquire_i16_zext_i32(ptr %ptr) { 559120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_zext_i32: 560120c5115SMatt Arsenault; MIPS32: # %bb.0: 561120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 562120c5115SMatt Arsenault; MIPS32-NEXT: sync 563120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 564120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 5658663926aSNikita Popov %load = load atomic i16, ptr %ptr acquire, align 2 566120c5115SMatt Arsenault %zext = zext i16 %load to i32 567120c5115SMatt Arsenault ret i32 %zext 568120c5115SMatt Arsenault} 569120c5115SMatt Arsenault 5708663926aSNikita Popovdefine i64 @atomic_load_acquire_i16_zext_i64(ptr %ptr) { 571120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_zext_i64: 572120c5115SMatt Arsenault; MIPS32: # %bb.0: 573120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 574120c5115SMatt Arsenault; MIPS32-NEXT: sync 575120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 576120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 577120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 5788663926aSNikita Popov %load = load atomic i16, ptr %ptr acquire, align 2 579120c5115SMatt Arsenault %zext = zext i16 %load to i64 580120c5115SMatt Arsenault ret i64 %zext 581120c5115SMatt Arsenault} 582120c5115SMatt Arsenault 5838663926aSNikita Popovdefine i32 @atomic_load_acquire_i32(ptr %ptr) { 584120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i32: 585120c5115SMatt Arsenault; MIPS32: # %bb.0: 586120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 0($4) 587120c5115SMatt Arsenault; MIPS32-NEXT: sync 588120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 589120c5115SMatt Arsenault; MIPS32-NEXT: nop 5908663926aSNikita Popov %load = load atomic i32, ptr %ptr acquire, align 4 591120c5115SMatt Arsenault ret i32 %load 592120c5115SMatt Arsenault} 593120c5115SMatt Arsenault 5948663926aSNikita Popovdefine i64 @atomic_load_acquire_i64(ptr %ptr) { 595120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i64: 596120c5115SMatt Arsenault; MIPS32: # %bb.0: 597*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 598*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 599*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 600*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 601*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 602*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 2 603*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 604120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 605*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 6068663926aSNikita Popov %load = load atomic i64, ptr %ptr acquire, align 8 607120c5115SMatt Arsenault ret i64 %load 608120c5115SMatt Arsenault} 609120c5115SMatt Arsenault 6108663926aSNikita Popovdefine float @atomic_load_acquire_f32(ptr %ptr) { 611120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_f32: 612120c5115SMatt Arsenault; MIPS32: # %bb.0: 613120c5115SMatt Arsenault; MIPS32-NEXT: lwc1 $f0, 64($4) 614120c5115SMatt Arsenault; MIPS32-NEXT: sync 615120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 616120c5115SMatt Arsenault; MIPS32-NEXT: nop 6178663926aSNikita Popov %gep = getelementptr inbounds float, ptr %ptr, i32 16 6188663926aSNikita Popov %load = load atomic float, ptr %gep acquire, align 4 619120c5115SMatt Arsenault ret float %load 620120c5115SMatt Arsenault} 621120c5115SMatt Arsenault 6228663926aSNikita Popovdefine double @atomic_load_acquire_f64(ptr %ptr) { 623120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_f64: 624120c5115SMatt Arsenault; MIPS32: # %bb.0: 625*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 626*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 627*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 628*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 629*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 2 630*7973d519SBrad Smith; MIPS32-NEXT: ori $1, $zero, 128 631*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 632*7973d519SBrad Smith; MIPS32-NEXT: addu $4, $4, $1 633*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $2, $f0 634*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $3, $f1 635*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 636120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 637*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 6388663926aSNikita Popov %gep = getelementptr inbounds double, ptr %ptr, i32 16 6398663926aSNikita Popov %load = load atomic double, ptr %gep acquire, align 8 640120c5115SMatt Arsenault ret double %load 641120c5115SMatt Arsenault} 642120c5115SMatt Arsenault 6438663926aSNikita Popovdefine ptr @atomic_load_acquire_p0i8(ptr %ptr) { 644120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_p0i8: 645120c5115SMatt Arsenault; MIPS32: # %bb.0: 646120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 64($4) 647120c5115SMatt Arsenault; MIPS32-NEXT: sync 648120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 649120c5115SMatt Arsenault; MIPS32-NEXT: nop 6508663926aSNikita Popov %gep = getelementptr inbounds ptr, ptr %ptr, i32 16 6518663926aSNikita Popov %load = load atomic ptr, ptr %gep acquire, align 4 6528663926aSNikita Popov ret ptr %load 653120c5115SMatt Arsenault} 654120c5115SMatt Arsenault 655120c5115SMatt Arsenault; -------------------------------------------------------------------- 656120c5115SMatt Arsenault; seq_cst 657120c5115SMatt Arsenault; -------------------------------------------------------------------- 658120c5115SMatt Arsenault 6598663926aSNikita Popovdefine i8 @atomic_load_seq_cst_i8(ptr %ptr) { 660120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8: 661120c5115SMatt Arsenault; MIPS32: # %bb.0: 662120c5115SMatt Arsenault; MIPS32-NEXT: lbu $2, 0($4) 663120c5115SMatt Arsenault; MIPS32-NEXT: sync 664120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 665120c5115SMatt Arsenault; MIPS32-NEXT: nop 6668663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 667120c5115SMatt Arsenault ret i8 %load 668120c5115SMatt Arsenault} 669120c5115SMatt Arsenault 6708663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i8_sext_i32(ptr %ptr) { 671120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i32: 672120c5115SMatt Arsenault; MIPS32: # %bb.0: 673120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 674120c5115SMatt Arsenault; MIPS32-NEXT: sync 675120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 676120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 677120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 6788663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 679120c5115SMatt Arsenault %sext = sext i8 %load to i32 680120c5115SMatt Arsenault ret i32 %sext 681120c5115SMatt Arsenault} 682120c5115SMatt Arsenault 6838663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i8_sext_i16(ptr %ptr) { 684120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i16: 685120c5115SMatt Arsenault; MIPS32: # %bb.0: 686120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 687120c5115SMatt Arsenault; MIPS32-NEXT: sync 688120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 689120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 690120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 6918663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 692120c5115SMatt Arsenault %sext = sext i8 %load to i16 693120c5115SMatt Arsenault ret i16 %sext 694120c5115SMatt Arsenault} 695120c5115SMatt Arsenault 6968663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i8_sext_i64(ptr %ptr) { 697120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i64: 698120c5115SMatt Arsenault; MIPS32: # %bb.0: 699120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 700120c5115SMatt Arsenault; MIPS32-NEXT: sync 701120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 24 702120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 24 703120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 704120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 7058663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 706120c5115SMatt Arsenault %sext = sext i8 %load to i64 707120c5115SMatt Arsenault ret i64 %sext 708120c5115SMatt Arsenault} 709120c5115SMatt Arsenault 7108663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i8_zext_i32(ptr %ptr) { 711120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i32: 712120c5115SMatt Arsenault; MIPS32: # %bb.0: 713120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 714120c5115SMatt Arsenault; MIPS32-NEXT: sync 715120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 716120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 7178663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 718120c5115SMatt Arsenault %zext = zext i8 %load to i32 719120c5115SMatt Arsenault ret i32 %zext 720120c5115SMatt Arsenault} 721120c5115SMatt Arsenault 7228663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i8_zext_i16(ptr %ptr) { 723120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i16: 724120c5115SMatt Arsenault; MIPS32: # %bb.0: 725120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 726120c5115SMatt Arsenault; MIPS32-NEXT: sync 727120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 728120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 7298663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 730120c5115SMatt Arsenault %zext = zext i8 %load to i16 731120c5115SMatt Arsenault ret i16 %zext 732120c5115SMatt Arsenault} 733120c5115SMatt Arsenault 7348663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i8_zext_i64(ptr %ptr) { 735120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i64: 736120c5115SMatt Arsenault; MIPS32: # %bb.0: 737120c5115SMatt Arsenault; MIPS32-NEXT: lbu $1, 0($4) 738120c5115SMatt Arsenault; MIPS32-NEXT: sync 739120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 255 740120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 741120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 7428663926aSNikita Popov %load = load atomic i8, ptr %ptr seq_cst, align 1 743120c5115SMatt Arsenault %zext = zext i8 %load to i64 744120c5115SMatt Arsenault ret i64 %zext 745120c5115SMatt Arsenault} 746120c5115SMatt Arsenault 7478663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i16(ptr %ptr) { 748120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16: 749120c5115SMatt Arsenault; MIPS32: # %bb.0: 750120c5115SMatt Arsenault; MIPS32-NEXT: lhu $2, 0($4) 751120c5115SMatt Arsenault; MIPS32-NEXT: sync 752120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 753120c5115SMatt Arsenault; MIPS32-NEXT: nop 7548663926aSNikita Popov %load = load atomic i16, ptr %ptr seq_cst, align 2 755120c5115SMatt Arsenault ret i16 %load 756120c5115SMatt Arsenault} 757120c5115SMatt Arsenault 7588663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i16_sext_i32(ptr %ptr) { 759120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_sext_i32: 760120c5115SMatt Arsenault; MIPS32: # %bb.0: 761120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 762120c5115SMatt Arsenault; MIPS32-NEXT: sync 763120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 764120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 765120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 7668663926aSNikita Popov %load = load atomic i16, ptr %ptr seq_cst, align 2 767120c5115SMatt Arsenault %sext = sext i16 %load to i32 768120c5115SMatt Arsenault ret i32 %sext 769120c5115SMatt Arsenault} 770120c5115SMatt Arsenault 7718663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i16_sext_i64(ptr %ptr) { 772120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_sext_i64: 773120c5115SMatt Arsenault; MIPS32: # %bb.0: 774120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 775120c5115SMatt Arsenault; MIPS32-NEXT: sync 776120c5115SMatt Arsenault; MIPS32-NEXT: sll $1, $1, 16 777120c5115SMatt Arsenault; MIPS32-NEXT: sra $2, $1, 16 778120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 779120c5115SMatt Arsenault; MIPS32-NEXT: sra $3, $1, 31 7808663926aSNikita Popov %load = load atomic i16, ptr %ptr seq_cst, align 2 781120c5115SMatt Arsenault %sext = sext i16 %load to i64 782120c5115SMatt Arsenault ret i64 %sext 783120c5115SMatt Arsenault} 784120c5115SMatt Arsenault 7858663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i16_zext_i32(ptr %ptr) { 786120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_zext_i32: 787120c5115SMatt Arsenault; MIPS32: # %bb.0: 788120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 789120c5115SMatt Arsenault; MIPS32-NEXT: sync 790120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 791120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 7928663926aSNikita Popov %load = load atomic i16, ptr %ptr seq_cst, align 2 793120c5115SMatt Arsenault %zext = zext i16 %load to i32 794120c5115SMatt Arsenault ret i32 %zext 795120c5115SMatt Arsenault} 796120c5115SMatt Arsenault 7978663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i16_zext_i64(ptr %ptr) { 798120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_zext_i64: 799120c5115SMatt Arsenault; MIPS32: # %bb.0: 800120c5115SMatt Arsenault; MIPS32-NEXT: lhu $1, 0($4) 801120c5115SMatt Arsenault; MIPS32-NEXT: sync 802120c5115SMatt Arsenault; MIPS32-NEXT: andi $2, $1, 65535 803120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 804120c5115SMatt Arsenault; MIPS32-NEXT: andi $3, $1, 0 8058663926aSNikita Popov %load = load atomic i16, ptr %ptr seq_cst, align 2 806120c5115SMatt Arsenault %zext = zext i16 %load to i64 807120c5115SMatt Arsenault ret i64 %zext 808120c5115SMatt Arsenault} 809120c5115SMatt Arsenault 8108663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i32(ptr %ptr) { 811120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i32: 812120c5115SMatt Arsenault; MIPS32: # %bb.0: 813120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 0($4) 814120c5115SMatt Arsenault; MIPS32-NEXT: sync 815120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 816120c5115SMatt Arsenault; MIPS32-NEXT: nop 8178663926aSNikita Popov %load = load atomic i32, ptr %ptr seq_cst, align 4 818120c5115SMatt Arsenault ret i32 %load 819120c5115SMatt Arsenault} 820120c5115SMatt Arsenault 8218663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i64(ptr %ptr) { 822120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i64: 823120c5115SMatt Arsenault; MIPS32: # %bb.0: 824*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 825*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 826*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 827*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 828*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 829*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 5 830*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 831120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 832*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 8338663926aSNikita Popov %load = load atomic i64, ptr %ptr seq_cst, align 8 834120c5115SMatt Arsenault ret i64 %load 835120c5115SMatt Arsenault} 836120c5115SMatt Arsenault 8378663926aSNikita Popovdefine float @atomic_load_seq_cst_f32(ptr %ptr) { 838120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_f32: 839120c5115SMatt Arsenault; MIPS32: # %bb.0: 840120c5115SMatt Arsenault; MIPS32-NEXT: lwc1 $f0, 64($4) 841120c5115SMatt Arsenault; MIPS32-NEXT: sync 842120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 843120c5115SMatt Arsenault; MIPS32-NEXT: nop 8448663926aSNikita Popov %gep = getelementptr inbounds float, ptr %ptr, i32 16 8458663926aSNikita Popov %load = load atomic float, ptr %gep seq_cst, align 4 846120c5115SMatt Arsenault ret float %load 847120c5115SMatt Arsenault} 848120c5115SMatt Arsenault 8498663926aSNikita Popovdefine double @atomic_load_seq_cst_f64(ptr %ptr) { 850120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_f64: 851120c5115SMatt Arsenault; MIPS32: # %bb.0: 852*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, -24 853*7973d519SBrad Smith; MIPS32-NEXT: .cfi_def_cfa_offset 24 854*7973d519SBrad Smith; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 855*7973d519SBrad Smith; MIPS32-NEXT: .cfi_offset 31, -4 856*7973d519SBrad Smith; MIPS32-NEXT: ori $5, $zero, 5 857*7973d519SBrad Smith; MIPS32-NEXT: ori $1, $zero, 128 858*7973d519SBrad Smith; MIPS32-NEXT: jal __atomic_load_8 859*7973d519SBrad Smith; MIPS32-NEXT: addu $4, $4, $1 860*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $2, $f0 861*7973d519SBrad Smith; MIPS32-NEXT: mtc1 $3, $f1 862*7973d519SBrad Smith; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 863120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 864*7973d519SBrad Smith; MIPS32-NEXT: addiu $sp, $sp, 24 8658663926aSNikita Popov %gep = getelementptr inbounds double, ptr %ptr, i32 16 8668663926aSNikita Popov %load = load atomic double, ptr %gep seq_cst, align 8 867120c5115SMatt Arsenault ret double %load 868120c5115SMatt Arsenault} 869120c5115SMatt Arsenault 8708663926aSNikita Popovdefine ptr @atomic_load_seq_cst_p0i8(ptr %ptr) { 871120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_p0i8: 872120c5115SMatt Arsenault; MIPS32: # %bb.0: 873120c5115SMatt Arsenault; MIPS32-NEXT: lw $2, 64($4) 874120c5115SMatt Arsenault; MIPS32-NEXT: sync 875120c5115SMatt Arsenault; MIPS32-NEXT: jr $ra 876120c5115SMatt Arsenault; MIPS32-NEXT: nop 8778663926aSNikita Popov %gep = getelementptr inbounds ptr, ptr %ptr, i32 16 8788663926aSNikita Popov %load = load atomic ptr, ptr %gep seq_cst, align 4 8798663926aSNikita Popov ret ptr %load 880120c5115SMatt Arsenault} 881