@Override
	public Pattern doOr(Pattern b, int sa) {
		ArrayList<Object> newlist = new ArrayList<Object>();

		for (int i = 0; i < orlist.length; ++i) {
			newlist.add(orlist[i].simplifyClone());
		}
		if (sa < 0) {
			for (int i = 0; i < orlist.length; ++i) {
				orlist[i].shiftInstruction(-sa);
			}
		}

		if (b instanceof OrPattern) {
			OrPattern b2 = (OrPattern) b;
			for (int i = 0; i < b2.orlist.length; ++i) {
				newlist.add(b2.orlist[i].simplifyClone());
			}
		}
		else {
			newlist.add(b.simplifyClone());
		}
		if (sa > 0) {
			for (int i = 0; i < newlist.size(); ++i) {
				((Pattern) newlist.get(i)).shiftInstruction(sa);
			}
		}
		return new OrPattern(newlist);
	}
A pattern that can be matched by matching any of a list of subpatterns
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/OrPattern.java